归并排序的思路,因为A数组有充足的空间,那么数据往A数组放即可。
技巧点在于只能从后往前放,所以要从后往前遍历。
import java.util.*;
public class Solution {
public void merge(int A[], int m, int B[], int n) {
if (n == 0) {
return;
}
int ia = m - 1, ib = n - 1;
for (int i = m + n - 1; i >= 0; i--) {
// A数组中的元素已经完成移动,将B中剩下的加入即可
if (ia == -1) {
A[i] = B[ib];
ib --;
continue;
}
// 选择大的向后移动
if (A[ia] > B[ib]) {
A[i] = A[ia];
ia --;
} else {
A[i] = B[ib];
ib --;
if (ib == -1){
// B数组遍历完成,结束
break;
}
}
}
}
}