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