算法 - 合并两个有序数组成一个有序数组
最近看到一个算法题目,觉得很有意义,就自己查资料,摸索着自己实现了代码,特记录一下。
题目:有两个数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。
有两种实现思路:
1. 定义一个新数组,长度为两个数组长度之和,将两个数组都copy到新数组,然后排序。
2. 给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成。
第一种方式应该是大多数人想到的,也比较容易实现,下面主要来实现第二种方式。
代码如下:
public static int[] MergeList(int a[],int b[]) { int result[]; // 定义一个新数组,长度为两个数组长度之和 result = new int[a.length+b.length]; //i:a数组下标 j:b数组下标 k:新数组下标 int i=0,j=0,k=0; // 按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标等于数组长度时退出循环 while(i<a.length && j<b.length) if(a[i] <= b[j]) { result[k++] = a[i++]; print(result); System.out.println(); }else{ result[k++] = b[j++]; } /* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 * * 此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成*/ while(i < a.length) result[k++] = a[i++]; while(j < b.length) result[k++] = b[j++]; return result; }