数据结构 第1章 排序2-快速排序.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文档。上传文档
查看更多
第10章 排序 10.3 交换排序 1) 冒泡排序 冒泡排序练习 设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列。冒泡排序一趟扫描的结果是 。 冒泡排序的算法分析 2) 快速排序 例1:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序的算法步骤。 1.这种不断划分子表的过程,计算机如何自动实现? 例2:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序算法的一趟实现过程。 快速排序练习 设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列。快速排序一趟扫描的结果是 。 快速排序算法详细分析: 问题2. “快速排序”是否真的比任何排序算法都快? 作业 * * 数据结构讲义 - 快速排序 两两比较待排序记录的关键码,如果发生逆序(即排列顺序与排序后的次序正好相反),则交换之,直到所有记录都排好序为止。 交换排序的主要算法有: 1) 冒泡排序 2) 快速排序 交换排序的基本思想是: 基本思路:每趟不断将记录两两比较,并按“前小后大”(或“前大后小”)规则交换。 优点:每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时部分理顺其他元素;一旦下趟没有交换发生,还可以提前结束排序。 前提:顺序存储结构 例:关键字序列 T=(21,25,49,25*,16,08),请写出冒泡排序的具体实现过程。 21,25,49, 25*,16, 08 21,25,25*,16, 08 , 49 21,25, 16, 08 ,25*,49 21,16, 08 ,25, 25*,49 16,08 ,21, 25, 25*,49 08,16, 21, 25, 25*,49 初态: 第1趟 第2趟 第3趟 第4趟 第5趟 ( H, C, Q, P, A, M, S, R, D, F, X , Y ) void bubble_sort(SqList *L) { int m,i,j,flag=1; RecordType x; m=n-1; while((m0)(flag==1)) { flag=0; for(j=1;j=m;j++) if(L-r[j].keyL-r[j+1].key) { flag=1; x=L-r[j]; L-r[j]=L-r[j+1]; L-r[j+1]=x; } m--; } } 时间效率:O(n2) —因为要考虑最坏情况 空间效率:O(1) —只在交换时用到一个缓冲单元 稳 定 性: 稳定 —25和25*在排序前后的次序未改变 详细分析: 最好情况:初始排列已经有序,只执行一趟起泡,做 n-1 次关键码比较,不移动对象。 最坏情形:初始排列逆序,算法要执行n-1趟起泡,第i趟(1? i? n) 做了n- i 次关键码比较,执行了n-i 次对象交换。此时的比较总次数KCN和记录移动次数RMN为: 从待排序列中任取一个元素 (例如取第一个) 作为中心,所有比它小的元素一律前放,所有比它大的元素一律后放,形成左右两个子表;然后再对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个。此时便为有序序列了。 基本思想: 优点:因为每趟可以确定不止一个元素的位置,而且呈指数增加,所以特别快! 前提:顺序存储结构 ( ), 设以首元素为枢轴中心 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) 编程时: ①每一趟的子表的形成是采用从两头向中间交替式逼近法; ②由于每趟中对各子表的操作都相似,主程序可采用递归算法。 具体程序可见教材P275 Low=high=3,本趟停止,将支点定位并返回位置信息 0 第1趟 08 16 25* 49 25 21 初态 6 5 4 3 2 1 r[i] high low 21 08 25 16 49 25* 3 21 pivotkey=21 08 25 16 4

文档评论(0)

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

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

1亿VIP精品文档

相关文档