2011-05-04 147 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