归并排序 带注释

 
    public int[] reversePairs(int[] nums) {
        mergeSort(nums,0,nums.length-1);
        return nums;
    }
    public void mergeSort(int [] a,int start,int end){
        if(start<end){//当子序列中只有一个元素时结束递归
            int mid=(start+end)/2;//划分子序列
            mergeSort(a, start, mid);//对左侧子序列进行递归排序
            mergeSort(a, mid+1, end);//对右侧子序列进行递归排序
            //少用空间否则leetcode很可能超时
            int[] tmp =new int[end+1-start];
            int l=start,r=mid+1,now=0;
            //
            while(l<=mid&&r<=end){
                if(a[l]>a[r]){
                    tmp[now++]=a[r++];
                     
                }else {
                    tmp[now++]=a[l++];
                }
            }
            //处理某一边排完另一半没排完的情况
            while(l<=mid){
                tmp[now++]=a[l++];
            }
            while(r<=end){
                tmp[now++]=a[r++];
            }
            System.arraycopy(tmp, 0, a, start, end+1-start);
        }
    }


posted @ 2020-09-04 16:06  CodeSpike  阅读(90)  评论(0编辑  收藏  举报
Live2D