方法一:正着合并
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int[] ACopy = new int[m];
for (int i = 0; i < m; i++) {
ACopy[i] = A[i];
}
// 合并两个有序数组
int len = m + n;
int i = 0;
int j = 0;
for (int k = 0; k < len; k++) {
if (i == m) {
A[k] = B[j];
j++;
} else if (j == n) {
A[k] = ACopy[i];
i++;
} else if (ACopy[i] <= B[j]) {
A[k] = ACopy[i];
i++;
} else {
A[k] = B[j];
j++;
}
}
}
} 方法二:倒着合并
public class Solution {
public void merge(int A[], int m, int B[], int n) {
// 合并两个有序数组
int len = m + n;
int i = m - 1;
int j = n - 1;
for (int k = len - 1; k >= 0; k--) {
if (i == -1) {
// 只能归并 j
A[k] = B[j];
j--;
} else if (j == -1) {
break;
} else if (A[i] <= B[j]) {
A[k] = B[j];
j--;
} else {
A[k] = A[i];
i--;
}
}
}
}