def mergeSort(A):
if len(A) < 2:
return A
mid = int(len(A)/2)
left = mergeSort(A[:mid])
right = mergeSort(A[mid:])
r,l = 0,0
B = []
while len(B) < len(A):
if r >= len(right) or (l < mid and left[l] < right[r]):
B.append(left[l])
l += 1
elif r < len(right):
B.append(right[r])
r += 1
return B
print(mergeSort([4,3,6,9,8,5,1]))
我对上述程序的怀疑是如何在没有单独的合并函数的情况下合并列表?MergeSort without merge function ,,这个算法如何合并列表
到底递归函数调用后,我觉得left
和right
列表包含每个只有一个元素......他们进行排序,并插入使用while
循环列出B
......那么其他的元素..因为在这里while
循环只执行一次,以及如何将列表A
再次分割和合并...我在互联网上获得了这个程序,它工作得很好。
你看到'while'循环吗?这是合并。它不需要是一个单独的功能。 – user2357112 2014-09-23 19:26:38
“在最后递归函数调用后,我认为左右列表中只包含一个元素” - 呃,事实并非如此。我不知道你为什么认为这是真的。 – user2357112 2014-09-23 19:27:17
是while循环将合并列出,但递归函数调用后,在列表中的所有元素都会成为各个元素..然后他们将会被合并 – 2014-09-23 19:30:40