归并排序的思路,因为A数组有充足的空间,那么数据往A数组放即可。

技巧点在于只能从后往前放,所以要从后往前遍历。

import java.util.*;
public class Solution {
    public void merge(int A[], int m, int B[], int n) {
        if (n == 0) {
            return;
        }
        int ia = m - 1, ib = n - 1;
        for (int i = m + n - 1; i >= 0; i--) {
          	// A数组中的元素已经完成移动,将B中剩下的加入即可
            if (ia == -1) {
                A[i] = B[ib];
                ib --;
                continue;
            }
          	// 选择大的向后移动
            if (A[ia] > B[ib]) {
                A[i] = A[ia];
                ia --;
            } else {
                A[i] = B[ib];
                ib --;
                if (ib == -1){
                  	// B数组遍历完成,结束
                    break;
                }
            }
        }
    }
}