class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int i = m - 1, j = n - 1, k = m + n -1;
// 设置三个指针
// i-->指向A数组的末尾
// j-->指向B数组的末尾
// k-->指向合并后数组的末尾
// 因为A数组后n个数时空的,所以从大到小排序不会扰乱原始的A数组的元素顺序
// 然后比较末尾的数值的大小,将较大的数放到合并数组的末尾,并将较大数的索引减去1
// 当出现A数组还有剩余时,不需要做操作,因为此时A数组已经是排好序的
// 当B数组还有剩余时,需要将剩余B数组的数转到A数组中
while(i >= 0 && j >= 0) {
if(A[i] > B[j])
A[k--] = A[i--];
else
A[k--] = B[j--];
}
while(j >= 0)
A[k--] = B[j--];
}
};
京公网安备 11010502036488号