算法思想:

分治自顶而下实现归并排序:

分治法的三个步骤
     设归并排序的当前区间是R[low..high],分治法的三个步骤是:
①分解:将当前区间一分为二,即求分裂点
                  
②求解:递归地对两个子区间R[low..mid]和R[mid+1..high]进行归并排序;
③组合:将已排序的两个子区间R[low..mid]和R[mid+1..high]归并为一个有序的区间R[low..high]。
  递归的终结条件:子区间长度为1(一个记录自然有序)

具体算法:

大致的代码如下:

 1 void MergeSortDC(SeqList R,int low,int high)
 2      {                            //用分治法对R[low..high]进行二路归并排序
 3        int mid;
 4        if(low<high)
 5         {                    //区间长度大于1
 6           mid=(low+high)/; //分解
 7           MergeSortDC(R,low,mid); //递归地对R[low..mid]排序
 8           MergeSortDC(R,mid+,high); //递归地对R[mid+1..high]排序
 9           Merge(R,low,mid,high); //组合,将两个有序区归并为一个有序区
         }
      }

算法分析:

(1)稳定性

归并排序是一种稳定的排序。

(2)存储结构

可用顺序存储结构。也易于在链表上实现。

(3)时间复杂度

对长度为n的文件,需进行 趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlgn)。

(4)空间复杂度

需要一个辅助向量来暂存两有序子文件归并的结果,故其辅助空间复杂度为O(n),显然它不是就地排序。

注意:
     若用单链表做存储结构,很容易给出就地的归并排序

最新文章

  1. mysql 主从复制配置
  2. 51nod1085(01背包)
  3. Open CV 播放视频(2)
  4. 持久化框架Hibernate 开发实例(二)
  5. hbase 学习笔记一---基本概念
  6. 解决MySQL 一闪而过的情况
  7. 【Web探索之旅】第二部分第三课:框架和内容管理系统
  8. 开销是有益的:AppCan 至HTML5移动创新和创业精神和健康
  9. hadoop-2.6.0源码编译问题汇总
  10. 深入理解 Python 异步编程(上)
  11. codeforces 286E Ladies&#39; Shop
  12. RePr: Improved Training of Convolutional Filters
  13. 配置MapReduce时遇到的问题记录
  14. Uvision4创建工程
  15. printf scanf cin cout的区别与特征
  16. CentOS6.5安装RHBase
  17. Js操作Cookie的实现
  18. 2018提高组训练Day2
  19. OpenID Connect Core 1.0(九)声明(Claims)
  20. 解决Eclipse里项目名有红叉,但是底下的每一个文件都没有红叉

热门文章

  1. 你喜欢使用eclipse+tomcat编程吗?!
  2. 11_关于SqlMapperConfig.xml
  3. python 在调用时计算默认值
  4. Shell中特殊符号
  5. Log4j 密码屏蔽
  6. C# 操作XML文件,用XML文件保存信息
  7. windows 远程桌面连接ubuntu xrdp 只看到墙纸其他什么都没有
  8. asp.net MVC FileResult在IE下异常的解决办法
  9. 【C#】动态加载dll程序集
  10. logger.debug,logger.info,logger.warn,logger.error,logger.fatal的区别