题目:
两个排序数组A1和A2,实现算法,将A2中的所有数字插入到A1中,并且所有数字是排序的。
分析:
数组移动与合并首先想到从前往后遍历,可能出现覆盖或多次移动情况,因此常采用从后往前的操作。
实现:
(1)将每位数字比对移动
public int[] insert(int a[],int b[]){
int len1 = a.length;
int len2 = b.length;
int len = len1+len2;
int c[] = new int[len];
int i=len1-1;
int j=len2-1;
int clen=len-1;
while(i>=0&&j>=0){
if(b[j]>a[i]){
c[clen--]=b[j--];
}
else{
c[clen--]=a[i--];
}
}
while(i>=0){
c[clen--]=a[i--];
}
while(j>=0){
c[clen--]=b[j--];
}
return c;
}
注意:比较两个数组,可能在最后出现一个比较完毕,另一个还存在元素,因此要做最终的判断。
(2)使用API实现复制及排序
public void sort() {
int[] arr1 = {1, 2, 36,55,77};
int[] arr2 = {10, 20, 30, 40};
int[] newArr = new int[arr1.length + arr2.length];
System.arraycopy(arr1, 0, newArr, 0, arr1.length);
System.arraycopy(arr2, 0, newArr, arr1.length, arr2.length);
for (int i : newArr) {
System.out.print(i + ",\t");
}
}