题解 | #合并两个有序的数组#
合并两个有序的数组
http://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665
逆向合并排序
思路
- 逆向进行合并排序即可;
- 若A数组先处理完毕,对B数组的剩余部分全部赋值到A的剩余位;
- 若B数组先处理完毕,则不需要做任何处理,因为A数组的剩余部分是有序的,而且正好位于剩余的未处理位。
public class Solution {
public static void merge(int A[], int m, int B[], int n) {
int len = m + n;
int index_A = m-1;
int index_B = n-1;
for (int i = len - 1; i >= 0; i--) {
if (index_A >= 0 && index_B >= 0) {
if (B[index_B] > A[index_A]) {
A[i] = B[index_B];
index_B--;
} else { // B[n-1] <= A[m-1]
A[i] = A[index_A];
index_A--;
}
} else { // n == 0 || m == 0
if (index_A < 0) {
while (index_B >= 0) {
A[i] = B[index_B];
index_B--;
i--;
}
// if处理完直接退出
break;
}
// else不用处理,因为本来全部就都是A数组的了
}
}
}
}