- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程的内容 第9章 内部排序 9.1 概述 4. 什么叫内部排序?什么叫外部排序? 6. 顺序存储(顺序表)的抽象数据类型如何表示? 7. 内部排序的算法有哪些? 9.2 插入排序 1) 直接插入排序 例2:关键字序列T= (21,25,49,25*,16,08),请写出直接插入排序的具体实现过程。 直接插入排序的算法分析 2) 折半插入排序 折半插入排序的算法分析 4)表插入排序 例:关键字序列 T=(21,25,49,25*,16,08), 请写出表插入排序的具体实现过程。 表插入排序的算法 表插入排序算法分析: 5)希尔(shell)排序(又称缩小增量排序) 例:关键字序列 T=(49,38,65,97, 76, 13, 27, 49*,55, 04),请写出希尔排序的具体实现过程。 时间效率: 附:希尔排序算法分析 希尔排序算法(其中某一趟的排序操作) 课堂练习: 原始序列: 256,301,751,129,937,863,742,694,076,438 原始序列: 256,301,751,129,937,863,742,694,076,438 9.3 交换排序 1) 冒泡排序 冒泡排序的算法分析 2) 快速排序 例1:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序的算法步骤。 1.这种不断划分子表的过程,计算机如何自动实现? 例2:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序算法的一趟实现过程。 一趟快速排序算法流程图 整个快速排序的递归算法: 例3:以关键字序列(256,301,751,129,937,863,742,694,076,438)为例,写出执行快速算法的各趟排序结束时,关键字序列的状态。 快速排序算法详细分析: 讨论2. “快速排序”是否真的比任何排序算法都快? 9.4 选择排序 若它不是这组对象中的第一个对象, 则将它与这组对象中的第一个对象对调; 在这组对象中剔除这个具有最小排序码的对象。在剩下的对象V[i+1]~V[n-1]中重复执行第①、②步, 直到剩余对象只有一个为止。 锦标赛排序 (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 个结点。每个结点包括关键码、对象序号和比较标志三种信息。 锦标赛排序是一个稳定的排序方法。 最大堆的向下调整算法 基于初始堆进行堆排序 最大堆的第一个对象H[0]具有最大的关键码,将H[0]与H[n]对调,把具有最大关键码的对象交换到最后,再对前面的n-1个对象,使用堆的调整算法HeapAdjust(H,0, n-1),重新建立最大堆。结果具有次最大关键码的对象又上浮到堆顶,即H[0]位置。 再对调V[0]和V[n-1],调用HeapAdjust(H,0, n-2),对前n-2个对象重新调整,…。 如此反复执行,最后得到全部排序好的对象序列。这个算法即堆排序算法,其细节在下面的程序中给出。 算法分析 若设堆中有 n 个结点,且 2k-1 ? n ? 2k,则对应的完全二叉树有 k 层。在第 i 层上的结点数 ? 2i (i = 0, 1, …, k-1)。在第一个形成初始堆的
您可能关注的文档
最近下载
- 八年级上名著《红岩》第10章(讲练测).docx VIP
- 表面处理技术在高端装备制造中的应用与挑战报告2025.docx
- 汪曾祺《钓鱼大夫》阅读答案试题解析理解 .pdf VIP
- 家庭反暴强制报告制度及服务流程.docx VIP
- 聚醚多元醇企业标准.pdf VIP
- 八年级上名著《红岩》第11章(讲练测).docx VIP
- T_CIATCM 093—2020_基层医疗卫生机构中医诊疗区(中医馆)团体标准远程会诊系统建设指南中国中医药信息学会.pdf VIP
- 八年级上名著《红岩》第12章(讲练测).docx VIP
- 2025国投生物制造创新研究院有限公司招聘(31人)考试备考试题及答案解析.docx VIP
- 边坡位移监测记录表.xlsx VIP
文档评论(0)