首先来决一个基本的问题:如何合并两个有序序列?
同样,我们也采取图形演示的方法,来一步一步解决问题,假设我们现在存在两个有序序列:1,3,5和2,4,6,7.
那么我们首先应该在脑海中画出这样的一副图形:
到现在,我们已经有解决问题的思路了:
比较这两个序列的第一个元素,谁较小就输出谁,,然后将较小的元素从原队列删除.如此往下进行,如果某个队列为空,则直接将另一个队列中元素依序输出就好.
按照上面的思路,整个过程用图形演示:
1. 选取较小元素
2. 选取较小元素
3. 选取较小元素
4. 选取较小元素
5. 选取较小元素,此时队列arr1已经为空了,因此后面只需要依次输出arr2中的元素即可
6. 输出元素
7. 输出元素
到现在整个过程已经描述清楚了.在具体的代码实现过程中,删除操作可以用移动下标来实现(许多操作,其实换个角度来想的)
代码实现为:
public static void merge(int[] arr, int start, int mid, int