- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
排序问题和离散集合的操作
第三章 排序问题和离散集合的操作
3.1 合并排序
3.1.1 合并排序算法的实现
假定有8个元素,第一步,划分为四对,每一对两个元素,用merge算法合并成四个有序的序列;第二步,把四个序列划分成两对,用merge算法合并成两个有序的序列;最后,再利用merge算法合并成一个有序的序列。
图3.1 合并8个元素的过程
算法3.1 合并排序算法
输入:具有个元素的数组A[]
输出:按递增顺序排序的数组A[]
1. template class Type
2. void merge_sort(Type A[],int n)
3. {
4. int i,s,t = 1;
5. while (tn) {
6. s = t; t = 2 * s; i = 0;
7. while (i+tn) {
8. merge(A,i,i+s-1,i+t-1,t);
9. i = i + t;
10. }
11. if (i+sn)
12. merge(A,i,i+s-1,n-1,n-i);
13. }
14. }
:开始合并时第一个序列的起始位置;
:合并前序列的大小;
:合并后序列的大小;
、、定义被合并的两个序列的边界。
例如,当=11时,算法的工作过程如图3.2所示,过程如下:
1.在第一轮循环,=1、=2,有5对1个元素的序列进行合并,当=10时, ,退出内部的while循环。但,不小于,所以,不执行第12行的合并工作,余留一个元素没有处理。
2.在第二轮,,有两对两个元素的序列进行合并,在时, ,退出内部的while循环。但,所以执行第12行的合并工作,把一个大小为2的序列和另外一个元素合并,产生一个3个元素的有序序列。
3.在第三轮,,有一对四个元素的序列合并,在时, ,退出内部的while循环。而,所以,不执行第12行的合并工作,余留一个序列没有处理。
4.在第四轮,。在时,,所以不执行内部的while循环,但,所以执行第12行的合并工作,产生一个大小为11的有序序列。
5.在进入第五轮时,因为,所以退出外部的while循环,结束算法。
图3.2 =11时的合并排序的工作过程
3.1.2 合并排序算法的分析
一、时间复杂性
假定是2的羃。
外部while循环的循环体的执行次数:次。
内部while循环 merge执行的 所产生 序列 元素比较总次数
merge执行次数 比较次数 序列数 长度 最少 最多
第1轮 1 2
第2轮 2,4 – 1 = 3 4
第3轮 4,8 – 1 = 7 8
第轮 ,
合并排序算法的执行时间,至少为:
至多为:
合并排序算法的运行时间,是,也是,因此,是。
二、空间复杂性
每调用一次merge算法,便分配一个适当大小的缓冲区,退出merge算法便释放它。在最后一次调用merge算法时,所分配的缓冲区最大,此时,它把两个序列合并成一个长度为的序列,需要个工作单元。所以,合并排序算法所使用的工作空间为。
3.2 基于堆的排序
3.2.1 堆
一、堆的定义
定义3.2 个元素称为堆,当且仅当它的关键字序列满足:
(3.2.1)
或者满足:
(3.2.2)
把满足(3.2.1)式的堆称为最小堆(min_heaps);把满足(3.2.2)式的堆称为最大堆(max_heaps)。
二、堆的性质:可看成是一棵完全二叉树。如果树的高度为
1.所有的叶结点不是处于第层,就是处于第层;
2.当时,第层上有个结点;
3.第层上如果有分支结点,则这些分支结点都集中在树的最左边;
4.每个结点所存放元素的关键字,都大于(最大堆)或小于(最小堆)它子孙结点所存放元素的关键字。
三、用数组存放具有个元素的堆
1.根结点存放在;
2.假定结点存放在,如果它有左儿子结点,则它的左儿子结点存放在;如果它有右儿子结点,则它的右儿子结点存放在;
3.非根结点的父亲结点存放在。
例:
图3.3 堆及其数组表示
3.2.2 堆的操作
一般来说,对于堆这样的数据结构,需要下面几种操作:
( void si
您可能关注的文档
最近下载
- 2024天津市津南区事业单位考试笔试题库及答案.docx VIP
- [2025秋期版]国开电大专科《人力资源管理》一平台形考任务一至四在线形考试题及答案 (2).pdf
- 2025年新版人教版四年级上册英语 四上Unit 2 My friends单元整体教学设计(1).pdf VIP
- 数字媒体技术专业申报材料.doc VIP
- 2025上海市农业科学院工作人员招聘(2025年第二批)笔试备考题库及答案解析.docx VIP
- 2024年浙江省杭州市中考数学试题卷(含答案详解).docx
- 老年人日常生活护理案例及分析.docx VIP
- 2025天津市津南区法院系统招聘考试真题.docx VIP
- 2025上海市农业科学院工作人员招聘(2025年第二批)笔试参考题库附答案解析.docx VIP
- 国有大型煤炭企业如何科学编制“十五五”发展规划.docx
文档评论(0)