软件基础—10排序.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
详细排序过程: 效率分析 4.2.4 选择排序 ——直接选择排序、堆排序 ?2、堆排序 4.2.5 归并排序 小结 作业 图示将无序序列{12,27,30,15,25,38,45}调整为小顶堆的过程。 效率分析 时间复杂度 记录移动次数 最好情况:0 最坏情况:3(n-1) 比较次数: 空间复杂度:S(n)=O(1) T(n)=O(n2) 4 . 2. 4 选择排序_ 直接选择排序、堆排序 1. 直接选择排序 4.2.4 选择排序 ——直接选择排序、堆排序 ?2、堆排序  是具有特定条件的顺序存储的完全二叉树,其特定条件是:任何一个非叶子结点的关键字大于等于(或小于等于)子女的关键字的值。 (1)堆定义:设有n个元素的序列 k1,k2,…,kn,当且仅当满足下述关系之一时,称之为堆。 ki≥k2i ki≥k2i+1 { Ki≤k2i ki≤k2i+1 { 或 i=1,2,…,?n/2? 4.2.4 选择排序 ——直接选择排序、堆排序 ?2、堆排序  是具有特定条件的顺序存储的完全二叉树,其特定条件是:任何一个非叶子结点的关键字大于等于(或小于等于)子女的关键字的值。 堆定义:设有n个元素的序列 k1,k2,…,kn,当且仅当满足下述关系之一时,称之为堆。 (2) 堆的示例 89 76 24 33 15 10 11 25 36 49 78 56 (a):堆顶元素取最大值 (b):堆顶元素取最小值 4.2.4 选择排序 ——直接选择排序、堆排序 ?2、堆排序 (3)堆排序思想:设有n个元素,将其按关键字排序。首先将这n个元素按关键字建成堆,将堆顶元素输出,得到n个元素中关键字最小(或最大)的元素。然后,再对剩下的n-1个元素建成堆,输出堆顶元素,得到n个元素中关键字次小(或次大)的元素。如此反复,便得到一个按关键字有序的序列。称这个过程为堆排序。 (4) 实现堆排序需解决两个问题: 1) 如何由一个无序序列建成一个堆? 2) 输出堆顶元素后,如何将剩余元素调整成一个新堆? (5)第二个问题解决方法——筛选 65 25 36 56 49 78 41 11 (b) 65 36 56 49 78 41 11 (c) 25 11 25 36 56 49 78 41 65 (a) 25 49 36 56 65 78 41 (d) 11 方法:输出堆顶元素之后,以堆中最后一个元素替代之;然后将根结点值与左、右子树的根结点值进行比较,并与其中小者进行交换;重复上述操作,直至叶子结点,将得到新的堆,称这个从堆顶至叶子的调整过程为“筛选” (6)第一个问题解决方法 方法:从无序序列的第?n/2?个元素(即此无序序列对应的完全二叉树的最后一个非终端结点)起,至第一个元素止,进行反复筛选 25 56 49 78 11 65 41 36 (a)无序序列 n=8, int(n/2)=4开始 25 56 49 36 11 65 41 78 (b): 78被筛选后的状态 25 56 41 36 11 65 49 78 (c): 49被筛选后的状态 25 11 41 36 56 65 49 78 (d): 56被筛选后的状态 (e): 被筛选之后建成堆 11 25 41 36 56 65 49 78 void HeapSort( HeapType H) { //堆顺序表H进行堆排序 for( i=H.length/2; i0; ? ?i) HeapAdjust(H, i, H.length); // 把H.r[1..H.length]成为一个堆, For(i=H.length; i1; ? ?i) { //把堆顶元素与最后一个记录相交换 rc=H.r[1]; H.r[1]=H.r[i]; H.r[i]=rc; HeapAdjust(H, 1, i-1); //把H.r[1..i-1]重新调整为一个堆 } } F、堆排序算法 A: 25 56 49 78 11 65 41 36 i=4 (1) 25 56 49 78 11 65 41 36 i=3 (2) 25 56 65 78 11 49 41 36 (3) (4) 25 56 65 78 11 49 41 36 i=2 (5) 25 78 65 56 11 49 41 36 i=1 F、堆排序算法 (7) 25 56 65 36 11 49 41 78 B: (6) 78 56 65 36 11 49 41 25 重新调整为一个堆 (8) 11 25 36 41 49 56 65 78 最终结果 例:含8个元素的无序序列(49,38,65

文档评论(0)

海川电子书城 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档