合并排序

Posted bowenqianngzhibushiwo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并排序相关的知识,希望对你有一定的参考价值。

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

 

以上是关于合并排序的主要内容,如果未能解决你的问题,请参考以下文章

java 合并排序数组 - 合并两个排序的数组

改进版的合并排序

合并排序 - 向量不排序

合并排序

Leetcode练习(Python):链表类:第23题:合并K个排序链表:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

将两个排序向量合并到一个排序向量中