数据结构章排序.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文档。上传文档
查看更多
数据结构章排序

例如,给定排序码头 50,37,66,98,75,12,26,49,树形选择排序过程见图7。 8.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,建立初始堆的过程如图8所示。 对排序码46,55,13,42,94,05,17,70,建成如图8(e)所示的大根堆后,堆排序过程如图9所示。 从图9(n)可知,将其结果按完全二叉树形式输出,则得到结果为:05,13,17,42,46,55,70,94,即为堆排序的结果。 4.堆排序的效率分析 在整个堆排序中,共需要进行n+?n/2? -1次筛选运算,每次筛选运算进行双亲和孩子或兄弟结点的排序码的比较和移动次数都不会超过完全二叉树的深度,所以,每次筛选运算的时间复杂度为O(log2n),故整个堆排序过程的时间复杂度为O(nlog2n)。 堆排序占用的辅助空间为1(供交换元素用),故它的空间复杂度为O(1)。 堆排序是一种不稳定的排序方法,例如,给定排序码:2,1,2,它的排序结果为:1,2,2。 8.5 归并排序 8.5.1 二路归并排序 二路归并排序的基本思想 二路归并排序的基本思想是:将两个有序子区间(有序表)合并成一个有序子区间,一次合并完成后,有序子区间的数目减少一半,而区间的长度增加一倍,当区间长度从1增加到n(元素个数)时,整个区间变为一个,则该区间中的有序序列即为我们所需的排序结果。 * 第八章排序 8.1 基本概念 8.1.1 排序介绍 排序(Sorting)是数据处理中一种很重要的运算,同时也是很常用的运算,一般数据处理工作25%的时间都在进行排序。简单地说,排序就是把一组记录(元素)按照某个域的值的递增(即由小到大)或递减(即由大到小)的次序重新排列的过程。 表1 学生档案表 学号 姓名 年龄 性别 99001 王晓佳 18 男 99002 林一鹏 19 男 99003 谢宁 17 女 99004 张丽娟 18 女 99005 周涛 20 男 99006 李小燕 16 女 例如,在表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)}; 这两个结果都是表1按年龄的递增排序结果。若按排序码姓名来进行递增排序,则得到的排

文档评论(0)

woaitiantian + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档