题目:有两个数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。
有两种实现思路:
-
定义一个新数组,长度为两个数组长度之和,将两个数组都copy到新数组,然后排序。
-
给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成。
public static int[] mergeList(int a[], int b[]) {
if (a.length==0) { return b; }
if (b.length==0) { return a; }
int result[] = new int[a.length+b.length];//定义一个新数组,长度为两个数组长度之和
int i=0, j=0, k=0; //i:a数组下标 j:b数组下标 k:新数组下标
//按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标等于数组长度时退出循环
while (i<a.length && j<b.length) {
if (a[i]<b[j]) {
result[k++] = a[i++];
}else {
result[k++] = b[j++];
}
}
//此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组
while (i < a.length) {
result[k++] = a[i++];
}
while (j < b.length) {
result[k++] = b[j++];
}
return result;
}