书中给的解题思路为:从尾到头比较A1和A2中的数字,并把较大的数字复制到A1的合适位置。
以下代码由于被在编辑器中编译运行,所以若有错误,请见谅,重在理解解决方法思路。
public static void merge(int[] A1,int[] A2,int lengthA1,int lengthA2){
int indexA1=lengthA1-1;
int indexA2=lengthA2-1;
int indexMerged=lengthA1+lengthA2-1;
while(indexA1>=0&&indexA2>=0){
if(A1[indexA1]>=A2[indexA2]){
A1[indexMerged]=A1[indexA1];
indexMerged--;
indexA1--;
}else{
A1[indexMerged]=A2[indexa2];
indexMerged--;
indexA2--;
}
}
//此循环是当lengthA2>lengthA1时,此时由于A1中已经没有数字,所以将A2中剩余的数字都插入A1[indexMerged]之前。
// 若lengthA2<lengthA1,则不进行此循环,
while(indexA2>=0){
A1[indexMerged]=A2[indexA2];
indexMerged--;
indexA2--;
}
}