2011-05-04 145 views
0

我們有兩個排序數組。在不使用額外內存的情況下,我們需要合併這兩個數組(第二個數組具有更多的合併空間)。輸出應通過第二個數組返回合併排序的數組

+0

我已經經歷了Mergesort從後到前,最終的數據將在第二個數組的末尾生成。這種情況下,第二個數組或最終數組可能在前面有一些空的空間。比這更好的方法? – kc3 2011-05-04 15:28:26

+2

只是將數組佔用區域的大小加起來,並從數組中的那個位置開始,而不是從最末尾開始。例如,假設A1包含10個元素和A2 8個元素,但A2有23個元素的空間。不是從元素23開始並向後工作,而是從元素18開始並向後工作。 – 2011-05-04 15:53:29

+0

此鏈接http://stackoverflow.com/questions/5958169/how-to-merge-two-sorted-arrays-into-a-sorted-array應該可以解決你的問題。 – Exception 2013-09-09 04:50:11

回答

7

假設addtional空間位於第二個數組的末尾,只需從數組末尾開始合併即可。使用指向數組中當前位置的兩個索引i1i2以及指向合併數組中當前位置的索引i

  1. i初始化,i1i2指向相應陣列的最後一個項目。

  2. 迭代:最大的a1[i1]a2[i2]寫入a2[i]並調整指數(即減少i和陣列保持大值的索引)。

+0

不錯的音符先生... – Exception 2013-09-09 04:26:59