我找不到任何有效的 Python 3.3 合并排序算法代码,所以我自己做了一个。有什么办法可以加快速度吗?它在大约 0.3-0.5 秒内对 20,000 个数字进行排序
def msort(x):
result = []
if len(x) < 2:
return x
mid = int(len(x)/2)
y = msort(x[:mid])
z = msort(x[mid:])
while (len(y) > 0) or (len(z) > 0):
if len(y) > 0 and len(z) > 0:
if y[0] > z[0]:
result.append(z[0])
z.pop(0)
else:
result.append(y[0])
y.pop(0)
elif len(z) > 0:
for i in z:
result.append(i)
z.pop(0)
else:
for i in y:
result.append(i)
y.pop(0)
return result
原文由 Hans 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以在对 mergesort 的顶级调用中初始化整个结果列表:
然后对于递归调用,您可以使用辅助函数,您传递的不是子列表,而是
x
的索引。底层调用从x
读取它们的值并直接写入result
。这样你就可以避免所有
pop
ing 和append
ing 应该提高性能。