- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章排序c,wordpress文章排序,dede文章排序,织梦文章排序,文章作者排序,dedecms文章排序,ecshop文章排序,phpcms文章排序,c大调奏鸣曲第三乐章,北邮c上机作业第五章
第10章 内部排序 10.4 选择排序 课堂练习: 3) 堆排序 例: ②怎样建堆? ③建堆算法 (即堆排序算法中的第一步) 例:对刚才建好的大根堆进行排序: 堆排序的算法 堆排序算法分析: 10.5 归并排序 一趟归并排序算法: (两路有序并为一路) 参见教材P283 递归形式的两路归并完整排序算法: 参见教材P284 归并排序算法分析: 10.6 基数排序 (Radix Sort) 讨论:是借用MSD方式来排序好呢,还是借用LSD方式? 计算机怎样实现LSD算法? 这种LSD排序方法称为: 讨论:所用队列是顺序结构,浪费空间,能否改用链式结构? 例: 第一趟收集的结果: 第二趟收集的结果: 基数排序算法分析 各种内部排序方法的比较 (教材P289) * 10.1 概述 10.2 插入排序 10.3 交换排序 10.4 选择排序 10.5 归并排序 10.6 基数排序 选择排序有多种具体实现算法: 1) 简单选择排序 2) 锦标赛排序 3) 堆排序 选择排序的基本思想是:每一趟在后面n-i 个待排记录中选取关键字最小的记录作为有序序列中的第i 个记录。 * 08 Winner (胜者) 21 08 08 63 25* 21 21 25 49 25* 16 08 63 r[1] 复习:2) 锦标赛排序 为便于处理,每个记录多开两个特殊分量: key otherinfo Index(结点位置编号) Tag(是否参加比较) 初态: 补足2k( k=?log2n? )个叶子结点 第一趟: 1.????? 给定一个由n个关键字不同的记录构成的序列,你能否用少于2n-3次比较找出n个元素中的最大值和最小值?如果有,请描述你的方法。最快需多少次比较?(无需写算法) (8分) 答:可以实现。选用锦标赛算法。两两元素比较,淘汰较小的,形如一棵二叉树。树根为最大值(此时用掉n-1次比较)。而最小者一定位于首次被淘汰之列。故只有? n/2?个。一共需n-1+? n/2?次比较。 1. 什么是堆? 堆的定义:设有n个元素的序列 k1,k2,…,kn,当且仅当满足下述关系之一时,称之为堆。 ki ≤ k2i ki ≤ k2i+1 ki ≥ k2i ki ≥ k2i+1 或者 i=1, 2,… n/2 2. 怎样建堆? 3. 怎样堆排序? 08 25 46 49 58 67 2 3 4 5 6 1 (大根堆) 91 85 66 76 58 67 2 3 4 5 6 1 55 7 有序列T1=(08, 25, 49, 46, 58, 67)和序列T2=(91, 85, 76, 66, 58, 67, 55),判断它们是否 “堆”? √ (小根堆) √ (小顶堆) (最小堆) (大顶堆) (最大堆) 终端结点(即叶子)没有任何子女,无需单独调整 步骤:从最后一个非终端结点开始往前逐步调整,让每个双亲大于(或小于)子女,直到根结点为止。 21 25 25* 49 16 08 1 2 3 4 5 6 例:关键字序列T= (21,25,49,25*,16,08),请建大根堆。 解:为便于理解,先将原始序列画成完全二叉树的形式: 这样可以很清晰地看到,应当从?n/2?开始调整。 完全二叉树的第一个非终端结点编号必为?n/2? !!(性质5) 21 i=3: 49 而且21还应当向下比较!! 4908,不必调整; i=2: 25=25*和16,也不必调整; i=1: 2125和49,要调整! void HeapSort (HeapType H ) { //H是顺序表,含有H.r[ ]和H.length两个分量 for ( i = H.length / 2; i 0; - - i ) //把r[1…length]建成大根堆 HeapAdjust(r, i,H. length ); //使r[i…length]成为大根堆 …… } // HeapSort HeapAdjust是针对结点 i 的堆调整函数,其含义是:从结点i开始到堆尾为止,自上向下比较,如果子女的值大于双亲结点的值,则互相交换,即把局部调整为大根堆 参见教材P281-282 08 25 21 25* 16 49 技巧:交换 1号与 6 号记录 r[1] r[n] 49 25 25* 21 16 08 1 2 3 4 5 6 49 25 21 25* 16 08 初始最大堆 25 25* 16 21 1 3 6 5 4
您可能关注的文档
最近下载
- 小学英语自然拼读 77页.pdf
- 2025贵州盐业(集团)黔东南有限责任公司招聘考试备考试题及答案解析.docx VIP
- 《小学阶段传统文化融入语文教学的有效路径探究》教学研究课题报告.docx
- 2024届高三复习备考工作计划暨备考策略.pdf VIP
- 入党积极分子入党答辩1.pptx VIP
- SEMI-F047-000-0706-en电压暂升暂降标准.pdf VIP
- 2025年成人高考政治考试大纲.docx VIP
- 2025年中国聚氨酯混炼胶数据监测研究报告.docx
- 在excel中绘制水位~库容~面积的图表.xls VIP
- 2025年成人高考高起本(历史地理综合)新版真题卷(附详细解析).pdf VIP
文档评论(0)