题目: 有两个排序的数组A1和A2,内存在A1的末尾有足够多的空间容纳A2,请事先一个函数,把A2中的所有数字插入到A1中并且所有的数组是排序的。
/*
* 算法思想:从尾部到头比较A1和A2中的数组,并把较大的数字复制到A1合适的位置
举例:A1 = {2,4,6,8};
A2= {3,5}
A1有效数据长度是4,A2数组长度是2,A1为了能放下A2数据中的数据,必须要末尾还有空闲空间,在给A1数组赋长度时要考虑当前的A1数组的长度能放得下A2数组数据,所以,A1的真实长度为6,A1中是有放数据的,其数据长度为4.
则A1数组空闲空间 = A1真实长度 - A2数组长度; (即代码中的OldA1length)
然后,挨个比较A1和A2中的元素,大的放A1数组末尾。
*
*/
public int[] Merge(int[] A1, int[] A2){
int A1length = A1.length; //A1数组长度
int A2length = A2.length; //A2数组长度
int OldA1length = A1length - A2length; //A1插入A2数据前的有效数据长度
int i=OldA1length-1; //A1数组有效数据最右边元素下标
int j=A2length-1; //A2数组最右边元素下标
int k=A1length-1; //A1数组最右边元素下标
//取两个数组相同长度部分,从A1末尾开始放入
while(i>=0&&j>=0){
if(A1[i] >= A2[j]){
A1[k--] = A1[i--];
}else{
A1[k--] = A2[j--];
}
}
//如果哪个数组有剩余部分,则有序放入A1数组中
while(i>0){
A1[k--] = A1[i--];
}
//这部分代码可有可以无
while(j>0){
A1[k--] = A2[j--];
}
return A1;
}