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--]; } };