【发布时间】:2017-11-12 03:11:52
【问题描述】:
我尝试在 python 中编写插入排序算法 -
def insertion(list):
checked = 2
while (checked <= len(list)):
for i in range(checked-1):
if list[checked-1] < list[i]:
list.insert(i, list[checked-1])
del list[checked]
checked+=1
return list
我测量了执行 1000 项排序所需的时间 - 106.08099999999997 千分之一秒
我发现这很慢,因为 -
def bubbleSort(alist,n):
for j in range(1,n):
nextnum = alist[j]
i = j - 1
while i>=0 and alist[i]>nextnum:
alist[i + 1] = alist[i]
i = i - 1
alist[i + 1] = nextnum
只拿了- 83.71800000000007 千分之一秒
有什么方法可以让我的代码更高效/我必须使用不同的代码吗?如果是这样,哪个插入排序实现在 python 中是最快的?我知道插入排序通常不是最好的算法。这只是为了我的学校作业,以便我可以更好地理解我们学习的算法。
【问题讨论】:
-
1.你是如何“测量”的?你用
timeit做的正确吗? 2. 如果你想要一个高效的排序算法,不要使用 O(n^2) 算法:使用合并或快速排序。如果你知道数字的范围,你也许可以使用基数或桶排序来实现线性时间 -
我刚刚使用了 time.clock()。它可能不准确,但这只是为了证明它比其他代码慢。同样,正如我在底部所说的,这只是为了学校工作。我不是在寻找最有效的算法,但感谢您的建议。
标签: algorithm python-3.x optimization insertion-sort