首页 > 编程语言 > 详细

归并排序

时间:2018-11-13 01:03:41      阅读:161      评论:0      收藏:0      [点我收藏+]

归并排序

  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++];
        } 
}   

 

归并排序

原文:https://www.cnblogs.com/maopaoer/p/9949804.html

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