- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数 据 结 构—— With C/C++ 数据结构课程的内容 第9章 内部排序 9.1 概述 4. 什么叫内部排序?什么叫外部排序? 6. 顺序存储(顺序表)的抽象数据类型如何表示? 7. 内部排序的算法有哪些? 9.2 插入排序 1) 直接插入排序 例2:关键字序列T= (21,25,49,25*,16,08),请写出直接插入排序的具体实现过程。 直接插入排序的算法分析 2) 折半插入排序 折半插入排序的算法分析 3)表插入排序 例:关键字序列 T=(21,25,49,25*,16,08), 请写出表插入排序的具体实现过程。 表插入排序的算法 表插入排序算法分析: 4)希尔(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. “快速排序”是否真的比任何排序算法都快? 从待排序列中任取一个元素 (例如取第一个) 作为中心,所有比它小的元素一律前放,所有比它大的元素一律后放,形成左右两个子表;然后再对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个。此时便为有序序列了。 基本思想: 优点:因为每趟可以确定不止一个元素的位置,而且呈指数增加,所以特别快! 前提:顺序存储结构 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. ( ), 设以首元素为枢轴中心 21, 25, 49, 25*,16, 08 初态: 第1趟: 第2趟: 第3趟: 讨论: 1. 这种不断划分子表的过程,计算机如何自动实现? 2. “快速排序”是否真的比任何排序算法都快? 08,16,21,25, 25*,(49) 21 16,08 ,( ) 25,25*,49 (08),16,21, 25,(25*,49) Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 编程时: ①每一趟的子表的形成是采用从两头向中间交替式逼近法; ②由于每趟中对各子表的操作都相似,主程序可采用递归算法。 见教材P275 int Partition(SqList L,int low,int high){ //一趟快排 //交换子表 r[low…high]的记录,使支点(枢轴)记录到位,并返回其位置。返回时,在支点之前的记录均不大于它,支点之后的记录均不小于它。 r[0]=r[low]; //以子表的首记录作为支点记录,放入r[0]单元 (续下页) 一趟快速排序算法(针对一个子表的操作) Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. pivotkey=r[low].key; //取支点的关键码存入pivotkey变量 while(low high){ //从表的两端交替地向中间扫描 while(lowhigh r[high].key=pivotkey ) - -high; r[low]=r[high]; //将比支点小的记录交换到低端;
原创力文档


文档评论(0)