我正在学习python,我已经实现了一个快速排序算法(种类)。我知道python的sort()
方法会更快但我想知道多少,所以我使用timeit
模块进行比较。
我为sort()
方法创建了一个“包装器”函数,因此它使用与我的实现相同的语法(并停止为就地排序),并为这两个函数调用timeit.repeat(3, 2000)
。 / p>
以下是我的功能结果:
[0.00019502639770507812, 0.00037097930908203125, 0.00013303756713867188]
对于python的sort():
[0.0001671314239501953, 0.0001678466796875, 0.00016808509826660156]
正如您所看到的,python的算法执行时间比我自己的执行时间更加一致。有谁知道为什么?
代码:
import timeit
import random
def quick(lst):
if not lst:
return []
else:
first, rest = lst[0], lst[1:]
great = []
less = []
for item in rest:
great.append(item) if item >= first else less.append(item)
return quick(less) + [first] + quick(great)
def sort(lst):
lst.sort()
return lst
x = [random.randint(1, 10000) for i in xrange(1, 1000)]
quick_t = timeit.Timer("'quick(x)'")
print quick_t.repeat(3, 2000)
sort_t = timeit.Timer("'sort(x)'")
print sort_t.repeat(3, 2000)
答案 0 :(得分:5)
你的时间安排在很多方面都是错误的。首先,您的sort
包装器仍会改变其输入而不是返回新列表:
>>> x = [2, 1]
>>> sort(x)
[1, 2]
>>> x
[1, 2]
其次,你根本不排序。您为字符串文字'quick(x)'
或'sort(x)'
的评估计时。实际上没有进行分类。
以下是实际执行时间的方式:
>>> x = [random.randint(1, 10000) for i in xrange(1, 1000)]
>>> print timeit.repeat('quick(x)', 'from __main__ import quick, x', repeat=3, number=500)
[1.1500223235169074, 1.0714474915748724, 1.0657452245240506]
>>> print timeit.repeat('sorted(x)', 'from __main__ import quick, x', repeat=3, number=500)
[0.0944752552401269, 0.10085532031979483, 0.09799135718691332]