我写过一个合并排序的递归版本。它使用一个单独的merge
常规的:如何迭代编写合并排序?
def merge(lst1, lst2):
i = j = 0
merged = []
while i < len(lst1) and j < len(lst2):
if lst1[i] <= lst2[j]:
merged.append(lst1[i])
i += 1
else:
merged.append(lst2[j])
j += 1
merged.extend(lst1[i:])
merged.extend(lst2[j:])
return merged
def merge_sort(lst):
if len(lst) < 2:
return lst
else:
middle = len(lst)/2
return merge(merge_sort(lst[:middle]), merge_sort(lst[middle:]))
为了节省堆栈空间(和踢/学习算法的纯粹的快乐),我想在一个迭代的方式来写这个功能。但是,我觉得这很难,因为我不知道如何在最终结合不同的列表。
谢谢!
考虑这里的答案:http://stackoverflow.com/questions/2171517/实施-A-归并排序,而无需-使用-AN-附加阵列 – Marcin 2012-01-11 16:58:13