十大排序

1.归并排序–利用了递归和辅助数组值拷贝

– 递归则是利用系统栈,记录每一个子问题的中间变量,进而得到最终的问题结果

class Solution {
    public int[] sortArray(int[] nums) {
        if(nums.length == 1) return nums;
        process(nums, 0, nums.length-1);
        return nums;
    }

    public void process(int[] arr, int l, int r){
        if(l == r){
            return;
        }
        int mid = l + ((r - l) >> 1);
        process(arr, l, mid);
        process(arr, mid+1, r);
        megerSort(arr, l, mid, r);
    }

    public void megerSort(int[] arr, int l, int mid, int r){
        int[] help = new int[r-l+1];
        int i = 0;
        int p1 = l;
        int p2 = mid+1;
        while(p1 <= mid && p2 <= r){
            help[i++] = arr[p1] >= arr[p2] ? arr[p2++] : arr[p1++];
        }
        // p2 越界了
        while(p1 <= mid){
            help[i++] = arr[p1++];
        }
        // p1 越界了
        while(p2 <= r){
            help[i++] = arr[p2++];
        }
        // 进行值拷贝
        for(int j=0; j<help.length;j++){
            arr[l+j] = help[j];
        }
    }
}