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