簡體   English   中英

就地合並流程:

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM