/**
* 写在前面,题目要求的是将有序数组合并,那么有可能这所谓的有序是顺序或者逆序
* 所以,应该在开始的时候判断一下
* 然后,在比较的时候应该根据顺序逆序来写判断逻辑
* 不过常规应该是顺序递增,然后就有了以下的代码😁
*/
public void merge(int A[], int m, int B[], int n) {
// 当n为0时,不需要合并
if(n == 0){
return;
}
// 当m为0时,并且n不为0,需要将B拷贝到A
else if(m == 0){
for(int i = 0 ;i
A[i] = B[i];
}
return;
}
// 当两个数组都为0,不做操作
if(m ==0 && n ==0){
return;
}
// 分别记录A,B的最右边位置
int i = m-1;
int j = n-1;
// A,B合并后的数组的角标
int index = m + n -1;
// B数组数据取完为结束信号
while(j >= 0){
// A数组还未取完
if(i >=0){
if(A[i]>B[j]){
A[index] = A[i];
i--;
}else{
A[index] = B[j];
j--;
}
}
// A数组已取完,将B逆序添加到A后
else{
A[index] = B[j];
j--;
}
// 每次添加一个数进去,指针就向前移
index --;
}
}