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

归并排序

时间:2018-11-13 02:31:43      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:方法   enter   ali   有序数组   归并   lse   ati   log   带来   

归并排序

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

 

归并排序

标签:方法   enter   ali   有序数组   归并   lse   ati   log   带来   

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

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