- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计与分析学习提纲,第三章 排序问题和离散集合的操作
PAGE PAGE 19第三章 排序问题和离散集合的操作3.1 合并排序3.1.1 合并排序算法的实现假定有8个元素,第一步,划分为四对,每一对两个元素,用merge算法合并成四个有序的序列;第二步,把四个序列划分成两对,用merge算法合并成两个有序的序列;最后,再利用merge算法合并成一个有序的序列。图3.1 合并8个元素的过程算法3.1 合并排序算法输入:具有个元素的数组A[]输出:按递增顺序排序的数组A[]1. template class Type2. 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 sift_up(Type H[ ],int i); 把堆中的第i个元素上移? void sift_down(Type H[ ],int n,int i); 把堆中的第i个元素下移? void
您可能关注的文档
最近下载
- 锰基普鲁士蓝作为钠离子电池正极材料的研究进展.pdf VIP
- 公安个人现实表现材料2篇.doc VIP
- 35kV变电站钢结构安装工程规划与实施.docx
- 2025年江苏省职业院校技能大赛高职组(现代化工HSE技能)参考试题库及答案.docx
- 光伏组件支架及太阳能板安装施工方案完整版.docx VIP
- 中国乳腺癌现状报告.docx VIP
- 人教版英语八年级上册 Unit 9 Can you come to my party 大单元整体学历案教案 教学设计附作业设计(基于新课标教学评一致性).docx VIP
- 基于Grasshopper的城市住宅区室外热舒适度参数化模拟与实测的对比研究.pdf VIP
- (正式版)DB35∕T 2250-2025 《免陪照护病区服务规范》.pdf VIP
- 超声科法律法规试卷含答案.doc VIP
原创力文档


文档评论(0)