首页 > 编程语言 > 详细

合并排序

时间:2019-10-03 17:16:09      阅读:82      评论:0      收藏:0      [点我收藏+]

合归并排序需要 ,先排序,再 合并。复杂度为O(nlogn);空间复杂度为O(N)。需要额外的数组,保存复制已排序的数组到原数组中。

 public static void  mergeSort(int [] a,int l,int r){
        if(l==r)
            return ;
        int mid=l+(r-l)/2;
        mergeSort(a,l,mid);
        mergeSort(a,mid+1,r);
        merge(a,l,mid,r);
    }
    public static void merge(int [] a,int l,int m,int r){
        int i=l;
        int p1=l;
        int p2=m+1;
        int [] tmp=new int[r-1+1];
        while(p1<=m&&p2<=r){
            tmp[i++]=a[p1]<a[p2]?a[p1++]:a[p2++];
        }
        while(p1<=m){
            tmp[i++]=a[p1++];
        }
        while(p2<=r){
            tmp[i++]=a[p2++];
        }
        for(int j=0;j<tmp.length;j++){
            a[l+j]=tmp[j];
        }
    }

 

合并排序

原文:https://www.cnblogs.com/bowenqianngzhibushiwo/p/11620066.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!