合工大数据结构 10-排序.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 10.4 选择排序 — 直接选择排序算法分析 稳定性: 不稳定排序 举例说明 时间复杂度: 比较次数: (n-1)+(n-2)+…+1=n(n-1)/2 O(n2) 空间性能:1个辅助空间; * 10.4 选择排序 — 锦标赛排序 基本思想 也称为树形选择排序(Tree Selection Sort),是一种按照锦标赛的思想进行选择排序的方法。 首先对n个记录进行两两比较,然后优胜者之间再进行两两比较,如此重复,直至选出最小关键字的记录为止。 这个过程可以用一棵有n个叶子结点的完全二叉树表示。 根节点中的关键字即为叶子结点中的最小关键字。 在输出最小关键字之后,欲选出次小关键字, 仅需将叶子结点中的最小关键字改为“最大值”,如∞, 然后从该叶子结点开始,和其兄弟的关键字进行比较, 修改从叶子结点到根的路径上各结点的关键字, 最后根结点的关键字即为次小关键字。 * 10.4 选择排序 — 锦标赛排序示例 实例:对数据表A=(73,45,79,90,81,75,94,97) 排序 45 45 75 45 79 75 94 73 45 79 90 81 75 94 97 ∞ 73 73 73 ∞ ∞ 79 75 ∞ 81 81 79 ∞ 90 90 81 ∞ ∞ 94 90 ∞ ∞ ∞ 94 ∞ 97 97 97 ∞ 45 排序结果: 73 75 79 81 90 94 97 * 10.4 选择排序 — 锦标赛排序分析 时间复杂度: 过程分析 O(nlog2n) 辅助空间为n-1,空间复杂度为O(n-1). 缺点:辅助存储空间较多、最大值进行多余的比较。 * 10.4 选择排序 — 堆排序 堆排序:利用堆进行的排序。 定义:称n个元素组成的序列(a1,a2,…,an) 为堆, 当且仅当满足下面关系。(其中ki是元素ai的关键字) (1) ki≤k2i ; ki≤k2i+1 或 (2) ki≥k2i ; ki≥k2i+1 ( 2i≤n;2i+1≤n) 如果将此序列对应到编号的完全二叉树, a1 a2 a3 a7 a6 a5 a8 a9 a4 a11 a10 a13 a12 1 2 3 4 5 6 7 8 9 10 11 12 13 … * 10.4 选择排序 — 堆排序 则堆的定义可用完全二叉树中的有关术语解释为: 每一结点均不大于(或不小于)其左、右孩子结点的值。 若序列(a1,a2,…,an)是堆,则堆顶(完全二叉树的根)必为序列中的最小或最大值。 将根最大的堆称为大根堆, 根最小的堆称为小根堆. a1 a2 a3 a7 a6 a5 a8 a9 a4 a11 a10 a13 a12 1 2 3 4 5 6 7 8 9 10 11 12 13 … ki≤k2i ; ki≤k2i+1 * 10.4 选择排序 — 堆示例 100 90 80 70 60 65 55 30 50 10 30 20 40 50 65 75 80 90 大根堆 小根堆 * 10.4 选择排序 — 堆示例 例: 判断下面数据是否是堆:(5,23,16,68,64,72,71,73,45,79,90,81,75,94,97) 解:对应的二叉树形式如下: 5 23 16 68 64 72 71 73 45 79 90 81 75 94 97 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 不是堆! * 10.4 选择排序 — 堆排序 实现堆排序还需要解决两个问题: (1)如何由一个无序序列建成一个堆? (2)如何在输出堆顶元素之后,调整剩余元素成为一个新的堆? 问题(2)的解决方法是: 在输出堆顶元素之后,以堆中最后一个元素替代之,此时根结点的左、右子树均为堆,则仅需自上至下进行调整即可。 我们称自堆顶至叶子的调整过程为“筛选”。 问题1的解决方法是: 从一个无序序列建堆的过程就是一个反复“筛选”的过程。若将此序列看成是一个完全二叉树,则最后一个非终端结点是第?n/2?个元素,由此“筛选”只需从第?n/2?个元素开始。 * 堆排序(约定进行增排序,因而采用大根堆) 如果初始序列是堆,则可通过反复执行如下操作而最终得到一个有序序列: 筛选过程即输出根:即将根(第一个元素)与当前子序列中的最后一个元素交换。 调整堆:将输出根之后的子序列调整为堆。 如果初始序列不是堆,则首先要将其先建成堆,然后再按(1)的方式来实现。 10.4 选择排序 — 堆排序 * 100 90 80

您可能关注的文档

文档评论(0)

整理王 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档