码迷,mamicode.com
首页 > 编程语言 > 详细

合并排序

时间:2019-10-03 18:10:52      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:合并   return   复杂   复制   sort   ati   static   length   mergesort   

合归并排序需要 ,先排序,再 合并。复杂度为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];
        }
    }

 

合并排序

标签:合并   return   复杂   复制   sort   ati   static   length   mergesort   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!