排序补充堆排序.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文档。上传文档
查看更多
排序补充堆排序

锦标赛排序 (Tournament Tree Sort) 它的思想与体育比赛时的淘汰赛类似。首先取得 n 个对象的关键码,进行两两比较,得到 ?n/2? 个比较的优胜者(关键码小者),作为第一步比较的结果保留下来。然后对这 ?n/2? 个对象再进行关键码的两两比较,…,如此重复,直到选出一个关键码最小的对象为止。 在图例中,最下面是对象排列的初始状态,相当于一棵满二叉树的叶结点,它存放的是所有参加排序的对象的关键码。 胜者树的概念 每次两两比较的结果是把关键码小者作为优胜者上升到双亲结点,称这种比赛树为胜者树。 位于最底层的叶结点叫做胜者树的外结点,非叶结点称为胜者树的内结点。每个结点除了存放对象的关键码 data 外,还存放了此对象是否要参选的标志 Active 和此对象在满二叉树中的序号index。 胜者树最顶层是树的根,表示最后选择出来的具有最小关键码的对象。 算法分析 锦标赛排序构成的树是满的完全二叉树,其深度为 ?log2(n+1)?,其中 n 为待排序元素个数。 除第一次选择具有最小关键码的对象需要进行 n-1 次关键码比较外,重构胜者树选择具有次小、再次小关键码对象所需的关键码比较次数均为 O(log2n)。总关键码比较次数为O(nlog2n)。 对象的移动次数不超过关键码的比较次数,所以锦标赛排序总的时间复杂度为O(nlog2n)。 这种排序方法虽然减少了许多排序时间,但是使用了较多的附加存储。 如果有 n 个对象,必须使用至少 2n-1 个结点来存放胜者树。最多需要找到满足 2k-1 n ? 2k 的k,使用 2*2k-1 个结点。每个结点包括关键码、对象序号和比较标志三种信息。 锦标赛排序是一个稳定的排序方法。 最大堆的向下调整算法 基于初始堆进行堆排序 最大堆的第一个对象V[0]具有最大的关键码,将V[0]与V[n]对调,把具有最大关键码的对象交换到最后,再对前面的n-1个对象,使用堆的调整算法FilterDown(0, n-1),重新建立最大堆。结果具有次最大关键码的对象又上浮到堆顶,即V[0]位置。 再对调V[0]和V[n-1],调用FilterDown(0, n-2),对前n-2个对象重新调整,…。 如此反复执行,最后得到全部排序好的对象序列。这个算法即堆排序算法,其细节在下面的程序中给出。 算法分析 若设堆中有 n 个结点,且 2k-1 ? n ? 2k,则对应的完全二叉树有 k 层。在第 i 层上的结点数 ? 2i (i = 0, 1, …, k-1)。在第一个形成初始堆的for循环中对每一个非叶结点调用了一次堆调整算法FilterDown( ),因此该循环所用的计算时间为: 其中,i 是层序号,2i 是第 i 层的最大结点数,(k-i-1)是第 i 层结点能够移动的最大距离。 在第二个for循环中,调用了n-1次FilterDown( )算法,该循环的计算时间为O(nlog2n)。因此,堆排序的时间复杂性为O(nlog2n)。 该算法的附加存储主要是在第二个for循环中用来执行对象交换时所用的一个临时对象。因此,该算法的空间复杂性为O(1)。 堆排序是一个不稳定的排序方法。 * * 如果 n 不是2的 k 次幂,则让叶结点数补足到满足 2k-1 n ? 2k 的2k个。叶结点上面一层的非叶结点是叶结点关键码两两比较的结果。最顶层是树的根。 08 Winner 21 08 08 63 25* 21 21 25 49 25* 16 08 63 tree[7] tree[8] tree[9] tree[10] tree[11] tree[12] tree[13] tree[14] 08 Winner (胜者) 21 08 08 63 25* 21 21 25 49 25* 16 08 63 tree[7] tree[8] tree[9] tree[10] tree[11] tree[12] tree[13] tree[14] 形成初始胜者树(最小关键码上升到根) a[0] 关键码比较次数 : 6 16 Winner (胜者) 21 16 16 63 25* 21 21 25 49 25* 16 63 tree[7] tree[8] tree[9] tree[10] tree[11] tree[12] tree[13] tree[14] 输出冠军并调整胜者树后树的状态 a[1] 关键码比较次数 : 2 21 Winner (胜者) 21 63 63 25* 21 21 25 49 25* 63 tree[7] tree[8] tree[9] tree[10] tree[11] tree[12] tree[13] tree[14]

文档评论(0)

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

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

1亿VIP精品文档

相关文档