两个索引位置分别从两个数组最右边开始,选择一个较大的数插入到A的最右边,插入后改变索引位置。到最后如果B中的数没有完全插入到B中,则将剩余的数插入到A中。

class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        int i = m-1;
        int j = n-1;
        int idx = m+n-1;
        //从右向左开始扫描,选择较大的数进行插入;
        while(i >= 0 && j>=0)
        {
            //选择较大的数插入到A中同时索引位置改变;
            if(A[i] > B[j])
            {
                A[idx] = A[i];
                i--;
            }else {
                A[idx] = B[j];
                j--;
            }
            idx--;
        }

        //如果B中有剩余数没有插入到数组中,则将余下的数插入到剩下的位置;
        //否则B中的数都插入到了A中则不作处理。因为A已经有序;
        while(j>=0)
        {
            A[idx--] = B[j--];
        }
    }
};