排序算法_MergeSort
2024-10-19 02:18:24
算法思想:
分治自顶而下实现归并排序:
分治法的三个步骤
设归并排序的当前区间是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),显然它不是就地排序。
注意:
若用单链表做存储结构,很容易给出就地的归并排序
最新文章
- mysql 主从复制配置
- 51nod1085(01背包)
- Open CV 播放视频(2)
- 持久化框架Hibernate 开发实例(二)
- hbase 学习笔记一---基本概念
- 解决MySQL 一闪而过的情况
- 【Web探索之旅】第二部分第三课:框架和内容管理系统
- 开销是有益的:AppCan 至HTML5移动创新和创业精神和健康
- hadoop-2.6.0源码编译问题汇总
- 深入理解 Python 异步编程(上)
- codeforces 286E Ladies&#39; Shop
- RePr: Improved Training of Convolutional Filters
- 配置MapReduce时遇到的问题记录
- Uvision4创建工程
- printf scanf cin cout的区别与特征
- CentOS6.5安装RHBase
- Js操作Cookie的实现
- 2018提高组训练Day2
- OpenID Connect Core 1.0(九)声明(Claims)
- 解决Eclipse里项目名有红叉,但是底下的每一个文件都没有红叉
热门文章
- 你喜欢使用eclipse+tomcat编程吗?!
- 11_关于SqlMapperConfig.xml
- python 在调用时计算默认值
- Shell中特殊符号
- Log4j 密码屏蔽
- C# 操作XML文件,用XML文件保存信息
- windows 远程桌面连接ubuntu xrdp 只看到墙纸其他什么都没有
- asp.net MVC FileResult在IE下异常的解决办法
- 【C#】动态加载dll程序集
- logger.debug,logger.info,logger.warn,logger.error,logger.fatal的区别