归并排序

Posted maopaoer

tags:

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

归并排序

  1. 保证任意长度为N的数组排序所需时间和NlogN成正比
  2. 主要缺点是它所需的额外空间和N成正比

即将两个数组归并成一个更大的有序数组,可以先递归将它分成两半排序,再将结果归并起来

① 原地归并 

实现归并的一种直截了当的方法是将俩个不同的有序数组归并到第3个数组中,将一个大数组排序时,我们需要进行很多次归并,因此每次归并都创建一个新数组来储存结果会带来问题,使用原地归并的方法,先将前半部分排序,再将后半部分排序,数组移动而不需要使用额外的空间

public static void main(Comparable[] a, int lo, int mid, int hi)
{   //将a[lo......mid] 与 a[mid+1.....hi] 归并
        int i=lo, int j=mid+1;
        for(int k=lo; k<hi; k++)    //将a[lo....hi]复制到aux[lo..hi]
            aux[k] = a[k];
        
        for(int k=lo; k<hi; k++)
        {
            if(i>mid)           a[k]=aux[j++];
            else if(j>hi)       a[k]=aux[i++];
            else if(a[j]<a[i])    a[k]=a[j++];
            else                  a[k]=aux[i++];
        } 
}   

 

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

python代码实现归并排序(Merge Sort )

排序之外部排序

Python代码实现归并排序

Python代码实现归并排序

算法排序02——归并排序介绍及其在分治算法思想上与快排的区别(含归并代码)

排序算法之归并排序