- 1、本文档共82页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CH排序己图术
将排序方法分为基于比较的排序和不基于比较的排序,其中,基于比较的排序方法的实现主要是通过关键码的比较和记录的移动这两种操作,并且其最差时间下限已经被证明为Ω(nlog2n) 内排序大致可分为插入排序、交换排序、选择排序、归并排序等四类;内排序还可分为两类:⑴简单的排序方法,其时间复杂度为O(n2);⑵先进的排序方法,其时间复杂度为O(nlog2n)。 直接插入排序过程示例 直接插入排序过程示例 希尔插入排序过程示例 起泡排序过程示例 需解决的关键问题 问题⑴的解决 问题⑵的解决 问题⑶的解决 需解决的关键问题 8.3.2 快速排序 改进的着眼点是:在起泡排序中,记录的比较和移动是在相邻单元中进行的,记录每次交换只能上移或下移一个单元,因而总的比较次数和移动次数较多。 在快速排序中,记录的比较和移动是从两端向中间进行的,关键码较大的记录一次就能从前面移动到后面的单元,关键码较小的记录一次就能从后面移动到前面的单元,记录每次移动的距离较远,从而减少了总的比较次数和移动次数。 快速排序的基本思想 首先选一个轴值(即比较的基准),通过一趟排序将待排序记录分割成独立的两部分,前一部分记录的关键码均小于轴值,后一部分记录的关键码均大于或等于轴值,然后分别对这两部分重复上述方法,直到整个序列有序。 ⑴如何选择轴值? ⑵在每个子序列内如何实现快速排序(通常叫做一次划分)? ⑶如何处理分区得到的两个待排序子序列? ⑷如何判别快速排序的结束? 13 65 27 50 38 49 55 j i j j 13 65 27 50 38 49 55 j i i i 13 65 27 50 38 49 55 i j j j 一次划分示例 问题⑴的解决 选择轴值的方法: (1)使用第一个记录的关键码; (2)选取序列中间记录的关键码; (3)比较序列中第一个记录、最后一个记录和中间记录的关键码,取关键码居中的作为轴值并调换到第一个记录的位置; (4)随机选取轴值。 问题⑵的解决 设待划分的序列是r[s] ~ r[t],设参数i,j分别指向子序列左、右两端的下标s和t,令r[s]为轴值, (1)j从后向前扫描,直到r[j]r[i],将r[j]移动到r[i]的位置,使关键码小(同轴值相比)的记录移动到前面去; (2)i从前向后扫描,直到r[i]>r[j],将r[i]移动到r[j]的位置,使关键码大(同轴值比较)的记录移动到后面去; (3)重复上述过程,直到i=j,即指向同一位置。 整个快速排序的过程可递归进行。若待排序列中只有一个记录,显然已有序,否则进行一趟快速排序后,再分别对分割所得的两个子序列进行快速排序(即递归处理)。 问题⑶、⑷的解决 13 27 50 38 49 55 j i i j 13 65 27 50 38 49 55 快速排序的执行过程 65 void quickSort (int r[ ], int first, int end ) {//在序列 first~end中递归地进行快速排序 if ( first end) { pivotpos = partition (r, first, end ); quickSort (r, first, pivotpos-1); quickSort (r, pivotpos+1, end ); } } 快速排序算法 快速排序的时间性能分析 快速排序的趟数取决于递归的深度 。 最好情况:每一次划分对一个记录定位后,该记录的左侧子表与右侧子表的长度相同,为O(nlog2n)。 最坏情况(正序或逆序):每次划分只得到一个比上一次划分少一个记录的子序列(另一个子序列为空),为 O(n2)。 平均情况:为O(nlog2n)。 08 16 21 25 28 49 0 1 2 3 4 5 初始 16 21 25 28 49 08 21 25 28 49 08 16 25 28 49 08 16 21 28 49 08 16 21 25 49 08 16 21 25 28 i = 1 i = 2 i = 3 i = 4 i = 5 快速排序退化的例子 ——选择排序 主要思想:每趟排序在当前待排序序列中选出关键码最小的记录,添加到有序序列中。 有序序列 无序序列 选出最小记录 有序序列 无序序列 一趟排序后
您可能关注的文档
最近下载
- 初中物理(粤沪版)公式大全最新版2016.doc VIP
- 2024年山西晋城市人民医院招聘笔试参考题库含答案详解.pdf
- 2025年第六届全国国家版图知识竞赛题库及答案(超全题库).doc
- 2025年时事政治热点题库及完整答案(历年真题).docx VIP
- 年产2.3亿片阿司匹林片剂生产车间工艺设计.doc
- HOLLiAS MACS V6.5.2用户操作手册(火电版).pdf
- 宜昌市西陵区社工招聘笔试真题 .pdf
- 四川超高层商务楼脚手架专项施工方案(三排落地式脚手架).doc VIP
- NexION1000-2000系列简易操作指南.doc VIP
- 肿瘤专科护士理论知识考试题库600题(含答案).docx
文档评论(0)