[英]Merge Process In-Place:
MergeSort 中的合並過程不能就地運行。 這是我的解釋:
它加起來了嗎?
A = 5,1,9,2,10,0
“q”:指向索引 2 處數組中間的指針。
我們將 q 處的元素及其左側的元素與 q 右側的元素合並。
A= 1,5,10,0,2,12
我們用“i”指向左邊的開始,用“j”指向右邊的開始。
我們用“k”指向數組中的當前 position。
該算法從 i=0、j=3、k=0 開始。
如果我們就地合並:for k=0:i= 0, j= 3,0<1 -> A[k] =A[j] andj++
結果數組:A={0,5,10,0,2,12}
正如我們所見,我們已經失去了值 1。
我們將繼續丟失值,例如在下一次迭代中:
對於 k=1:i= 0, j= 4,0<2 =⇒A[k] =A[i] andi+
結果數組:A={0,0,10,0,2,12}
它可以使用子陣列的旋轉來完成。 存在時間復雜度為 O(n log(n)) 的合並排序,但它們使用數組的一部分作為工作存儲。 如果需要穩定性,則使用一些唯一值的小子集(如 2 sqrt(n))來提供空間,因為在排序之前重新排序唯一值不會破壞穩定性。 回到簡單的旋轉算法:
1 5 10 0 2 12
0 1 5 10 2 12 0 < 1, rotate 0 into place, adjust working indexes
0 1 5 10 2 12 1 < 2, continue
0 1 2 5 10 12 2 < 5, rotate 2 into place, adjust working indexes
0 1 2 5 10 12 5 < 12, continue
0 1 2 5 10 12 10 < 12, continue, end of left run, done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.