[工学]数据结构讲义8.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文档。上传文档
查看更多
[工学]数据结构讲义8

* * * * * * * * * * * * * * * * * * * * * * 直接选择排序:也称简单选择排序。其思想是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录并和第i个记录交换。 直接选择排序所需进行的“比较” 次数都相同,为 n ×(n+1)/ 2 “移动”次数在待排序列为“正序” 时达最小为0,在 “逆序” 时达最大为 3(n-1)。 8.4.1 直接选择排序 * * 堆的定义: n 个元素的序列(k1, k2, …, kn)当且仅当满足如下关系时,称之为堆。 或 (i=1,2,…n/2) 8.4.2 堆排序 * * 96 {96,83,27,38,11,09} 堆顶取最大值 (大根堆) 堆顶取最小值(小根堆) {12,36,24,85,47,30,53,91} 27 83 83 83 83 12 36 85 24 91 30 53 47 8.4.2 堆排序 * * 若在输出堆顶的最小值后,使得剩余n-1个元素的序列又建成一个堆,则得到n个元素中的次小值,如此反复执行,便能得到一个有序序列,这个过程称之为堆排序。 所以,堆排序的两个关键问题是: 如何将一个无序序列调整为堆; 如何在互换堆顶之后重新调整为堆 。 8.4.2 堆排序 * * 筛选过程 13 38 27 49 76 65 49 97 97 27 49 97 13 97 27 97 重复筛选过程 8.4.2 堆排序--演示 * * 建初始堆演示 49 38 65 27 13 76 97 49 无序序列 筛选97 49 97 筛选65 65 13 筛选38 38 筛选49 49 13 27 建成小顶堆 8.4.2 堆排序--演示 * * 堆排序方法对于记录较少的文件并不值得提倡,但对n较大的文件还是很有效的。建初始堆和调整新堆时的筛选占较大比例的运行时间。 无论待排序列中的记录是正序还是逆序排列,堆排序的时间复杂度都是O(n*logn)。 8.4.2 堆排序—算法分析 * * 归并排序是将两个或两个以上的有序表组合成一个新的有序表。 假设初始序列含有n 个记录,则可看成是n 个有序的子序列,每个子序列的长度为1,然后两两归并得到n/2个长度为2或者1的有序子序列,再两两归并,….., 如此重复直到得到一个长度为n 的有序序列为止,这种排序方法成为2-路归并排序。 8.5 归并排序 * * 下面给出一个2-路归并排序的例子 初始关键字 49 38 65 97 76 13 27 一趟归并 38 49 65 97 13 76 27 二趟归并 38 49 65 97 13 27 76 三趟归并 13 27 38 49 65 76 97 8.5 归并排序--2-路归并排序演示 * * 与快速排序和堆排序相比,归并排序的最大特点是,它是一种稳定的排序方法。但在一般情况下,很少用2-路归并排序法进行内部排序。 2-路归并排序的时间复杂度为O(nlogn)。 8.5 归并排序--2-路归并排序算法分析 * * 8.6.1 箱排序 箱排序(Bin Sort)也称桶排序(Bucket Sort),其基本思想是: 设置若干个箱子,依次扫描待排序的记录R[0], R[1],…, R[n-1],把关键字为k的记录全部装入到第k个箱子里(分配),然后按序号依次将各飞空的箱子首位连接起来(收集)。 8.6 分配排序 * * 基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。 定义:设含有 n 个记录的序列为:     {R1,R2,….,Rn} 且每个记录 Ri 中含有 d 个关键字,则称该序列对关键字有序指:对于序列中任意两个记录 Ri 和 Rj(1≤ij≤n)都满足下列有序关系 其中 K0 被称作最主位关键字,Kd-1 被称作最次位关键字。 8.6.2 基数排序 * * 多关键字排序经常用到的两种方法。 最高位优先法(Most Significant Digit first) 最低位优先法(Least Significant Digit first) 8.6.2 基数排序 * * 排序方法 平均时间 最坏情况 辅助存储 稳定性 直接插入/冒泡 O(n*n) O(n*n) O(1) √ 直接选择 O(n*n) O(n*n) O(1) × 快速排序 O(nlogn) O(n*n) O(logn) × 堆排序 O(nlogn) O(nlogn) O(1) × 归并排序 O(nlog

文档评论(0)

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

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

1亿VIP精品文档

相关文档