第7篇 排序技术.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* R1与Rn-1交换,堆被破坏。 对R1与Rn-2调整。 仅需调整一次, 堆建成 。 堆调整结束。 85 85 47 47 16 30 53 91 85 30 47 47 16 85 53 91 85 53 47 47 16 85 30 91 * 第二个问题的背景: 输出堆顶元素后,将堆底元素送入堆顶(或将堆顶元素与堆底元素交换),堆可能被破坏。 破坏的情况仅是根结点和其左右孩子之间可能不满足堆的特性,而其左右子树仍然是局部的堆。 在这种情况下,将其R1 … Ri整理成堆。 (i=n-1..1) * 91 47 24 36 53 30 85 16 a.初始堆。 输出堆顶元素,再将最后一个元素放入堆顶(为了操作简便,将堆顶元素R1与Rn交换)。 b.堆被破坏 调整:根结点与左右子女较大者比较,若比根大,交换 c.右子树不满足堆,继续调整 d.到了叶子结点,调整结束,堆建成。 16 47 24 36 53 30 85 91 24 85 47 36 53 30 16 91 24 85 47 36 16 30 53 12 * * 【例】建堆的过程: 设初始排序序列:30 24 85 16 36 53 91 47 ,建成大顶堆。 30 24 16 36 53 91 85 47 a.8个结点的初始状态。 从R4结点开始调整; b.调整结束后,以R4为 根的子树满足堆特性。 再将以R3结点为根的 子树调整为堆; 30 24 47 36 53 91 85 16 c. 以 R3为根的子树满足堆特性。 再将以R2结点为根的子树调整为堆; 30 24 47 36 53 85 91 16 4、堆排序的实现 * 建堆过程示例 91 47 24 36 53 85 30 16 91 47 24 36 53 30 85 16 以R2为根的子树满足堆特性。 再将以R1结点为根的子树调整为堆 d. 调整结束后,整棵树为堆。 30 47 24 36 53 85 91 16 * 堆排序: 对n个元素的序列进行堆排序,先将其建成堆,以根结点与第n个结点交换;调整前n-1个结点成为堆,再以根结点与第n-1个结点交换;…;重复上述操作,直到整个序列有序。 * 8.5 归并排序 归并排序的思想是将几个相邻的有序表合并成一个总的有序表,本节主要介绍2-路归并排序。 1.两个有序表的合并 二路归并排序的基本操作是将两个有序表合并为一个有序表。 R: 25 38 46 75 18 37 40 46 78 80 s m m+1 t R1: 18 25 37 38 46 46 75 78 80 s t * * 2. 2-路归并算法 2-路归并的基本思想是:只有1个元素的表总是有序的,所以将排序表R[1..n],看作是n个长度为len=1的有序子表,对相邻的两个有序子表两两合并到R1[1..n],使之生成表长len=2的有序表;再进行两两合并到R[1..n]中,…,直到最后生成表长len=n的有序表。这个过程需要「log2n」趟。 * 56 47 69 48 27 98 56 59 38 28 66 47 56 48 69 27 98 56 59 28 38 66 47 48 56 69 27 56 59 98 28 38 66 27 47 48 56 56 59 69 98 28 38 66 27 28 38 47 48 56 56 59 66 69 98 * * 3.2-路归并排序的递归算法 * 7.6基数排序 基数排序是一种借助于多关键码排序的思想,是将单关键码按基数分成“多关键码”进行排序的方法。 ?7.6.1 多关键码排序 扑克牌中52张牌,可按花色和面值分成两个字段,其大小关系为: 花色:梅花 方块 红心 黑心 面值:2 3 4 5 6 7 8 9 10 J Q K A 若对扑克牌按花色、面值进行升序排序,得到如下序列: 梅花2,3,...,A,方块2,3,...,A,红心2,3,...,A,黑心2,3,...,A 这就是多关键码排序。 * 7.6.2链式基数

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档