数据结构(C++描述)_排序精品.pptVIP

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
从图9-6(a)可知,8个队经过4场比赛,获胜的4个队进入半决赛,再经过2场半决赛和1场决赛即可知道冠军属谁(共7场比赛)按照锦标赛的传递关糸,亚军只能产生于分别在决赛,半决赛和第一轮比赛中输给冠军的选取手中,于是亚军只能在b、c、e这3个队中产生(见图9-6(b)),即进行2场比赛(e 与c一场,e与c的胜队与b一场)后,即可知道亚军属谁。同理,第三名只需在c、f、g这3个队产生(见图9-6(c))即进2场比赛(f与g一场,f与g的胜队与c一场)即可知道第三名属谁。 树形选择排序(tree selection sorting),又称锦标赛排序(tournament sorting),是一种按照锦标赛的思想进行选择排序的方法。首先对n个记录的排序码进行两两比较,然后在其中?n/2? 个较小者之间再进行两两比较,如此重复,直到选出最小排序码为止。 例如,给定排序码头 50,37,66,98,75,12,26,49,树形选择排序过程见图9-7。 9.4.3 堆排序 1.堆的定义 若有n个元素的排序码k1,k2,k3,…,kn,当满足如下条件: ki≤k2i ki≥k2i (1) ki≤k2i+1 或 (2) ki≥k2i+1 其中i=1,2,…,?n/2? ?则称此n个元素的排序码k1,k2,k3,…,kn为一个堆。 若将此排序码按顺序组成一棵完全二叉树,则(1)称为小根堆(二叉树的所有根结点值小于或等于左右孩子的值),(2)称为大根堆(二叉树的所有根结点值大于或等于左右孩子的值)。 若n个元素的排序码k1,k2,k3,…,kn满足堆,且让结点按1、2、3、…、n顺序编号,根据完全二叉树的性质(若i为根结点,则左孩子为2i,右孩子为2i+1)可知,堆排序实际与一棵完全二叉树有关。若将排序码初始序列组成一棵完全二叉树,则堆排序可以包含建立初始堆(使排序码变成能符合堆的定义的完全二叉树)和利用堆进行排序两个阶段。 2.堆排序的基本思想 将排序码k1,k2,k3,…,kn表示成一棵完全二叉树,然后从第?n/2? 个排序码开始筛选,使由该结点作根结点组成的子二叉树符合堆的定义,然后从第?n/2? -1个排序码重复刚才操作,直到第一个排序码止。这时候,该二叉树符合堆的定义,初始堆已经建立。 接着,可以按如下方法进行堆排序:将堆中第一个结点(二叉树根结点)和最后一个结点的数据进行交换(k1与kn),再将k1~kn-1重新建堆,然后k1和kn-1交换,再将k1~kn-2重新建堆,然后k1和kn-2交换,如此重复下去,每次重新建堆的元素个数不断减1,直到重新建堆的元素个数仅剩一个为止。这时堆排序已经完成,则排序码k1,k2,k3,…,kn已排成一个有序序列。 若排序是从小到大排列,则可以用建立大根堆实现堆排序,若排序是从大到小排列,则可以用建立小根堆实现堆排序。 例如,给定排序码46,55,13,42,94,05,17,70,建立初始堆的过程如图9-8所示。 对排序码46,55,13,42,94,05,17,70,建成如图9-8(e)所示的大根堆后,堆排序过程如图9-9所示。 * 第9章 排序 数据结构(C++描述) 目录 9.1 基本概念 9.2 插入排序 9.3 交换排序 9.4 选择排序 9.5 归并排序 *9. 6 分配排序 退出 9.1 基本概念 9.1.1 排序介绍 排序(Sorting)是数据处理中一种很重要的运算,同时也是很常用的运算,一般数据处理工作25%的时间都在进行排序。简单地说,排序就是把一组记录(元素)按照某个域的值的递增(即由小到大)或递减(即由大到小)的次序重新排列的过程。 表9-1 学生档案表 学号 姓名 年龄 性别 99001 王晓佳 18 男 99002 林一鹏 19 男 99003 谢宁 17 女 99004 张丽娟 18 女 99005 周涛 20 男 99006 李小燕 16 女 例如,在表9-1中,若以每个记录的学号为关键字,按排序码年龄的递增(由小到大)排序,则所有记录的排序结果可简记为: {(99006,16),(99003,17),(99001,18),(99004,18),(99002,19),(99005,20)}; 也可能为: {(99006,16),(99003,17),(99004,18),(99001,18),(99002,19),(99005,20)}; 这两个结果都

文档评论(0)

挑战不可能 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档