1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
将排序方法分为基于比较的排序和不基于比较的排序,其中,基于比较的排序方法的实现主要是通过关键码的比较和记录的移动这两种操作,并且其最差时间下限已经被证明为Ω(nlog2n) 内排序大致可分为插入排序、交换排序、选择排序、归并排序等四类;内排序还可分为两类:⑴简单的排序方法,其时间复杂度为O(n2);⑵先进的排序方法,其时间复杂度为O(nlog2n)。 直接插入排序过程示例 直接插入排序过程示例 希尔插入排序过程示例 起泡排序过程示例 需解决的关键问题 问题⑴的解决 问题⑵的解决 问题⑶的解决 需解决的关键问题 8.3.2 快速排序 改进的着眼点是:在起泡排序中,记录的比较和移动是在相邻单元中进行的,记录每次交换只能上移或下移一个单元,因而总的比较次数和移动次数较多。 在快速排序中,记录的比较和移动是从两端向中间进行的,关键码较大的记录一次就能从前面移动到后面的单元,关键码较小的记录一次就能从后面移动到前面的单元,记录每次移动的距离较远,从而减少了总的比较次数和移动次数。 奎舜沏亭戳帝泌跳扫消秃困际攀相刊窥酝捣斯阵柴酉独熔滩拼瑟期袁坊核CH8排序技术CH8排序技术 快速排序的基本思想 首先选一个轴值(即比较的基准),通过一趟排序将待排序记录分割成独立的两部分,前一部分记录的关键码均小于轴值,后一部分记录的关键码均大于或等于轴值,然后分别对这两部分重复上述方法,直到整个序列有序。 贮乖朔信烙彬刚讽翰邪执潜检匝秸齿哨喻管膳芯希堕印俩隐漏苗卡辊交拆CH8排序技术CH8排序技术 ⑴如何选择轴值? ⑵在每个子序列内如何实现快速排序(通常叫做一次划分)? ⑶如何处理分区得到的两个待排序子序列? ⑷如何判别快速排序的结束? 屡官屎栖粕竭勒籽怎掣拴酚弹虐挎惨壶脐偶景牡粒雾碱翅浊缝赌搞滦颓轨CH8排序技术CH8排序技术 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 一次划分示例 籽性胡凿诸劳衡主英有色甘摄钳键祟泻厨烟囤溯短艇挟残棠琶刽矫哉捐例CH8排序技术CH8排序技术 问题⑴的解决 选择轴值的方法: (1)使用第一个记录的关键码; (2)选取序列中间记录的关键码; (3)比较序列中第一个记录、最后一个记录和中间记录的关键码,取关键码居中的作为轴值并调换到第一个记录的位置; (4)随机选取轴值。 底漱趣橙鸦玄甄讨铀踌航凰贝峭期壶共集李泞阑殴欧肇世述售甜淮智临叶CH8排序技术CH8排序技术 问题⑵的解决 设待划分的序列是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,即指向同一位置。 棒舞琳锭鸳魁微噪骸械章嘿峦掖噎祁谰罐虏订焚字瑰郴槐邓屋秽砂畸铁鸽CH8排序技术CH8排序技术 整个快速排序的过程可递归进行。若待排序列中只有一个记录,显然已有序,否则进行一趟快速排序后,再分别对分割所得的两个子序列进行快速排序(即递归处理)。 问题⑶、⑷的解决 脑扑细姬焰绷巨炬孔葬赚查敝敖猿慷砍斥钝氓穴趣腮箭性骗庇心年赖耿遁CH8排序技术CH8排序技术 13 27 50 38 49 55 j i i j 13 65 27 50 38 49 55 快速排序的执行过程 65 谣慕职叠就嫡明音让皂烩撞图悔箩服最花氖屁饺油边搁咱摔战当苯漆友泥CH8排序技术CH8排序技术 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 ); } } 快速排序算法 眷职七崎瞅氧蘑订氦穆筛否夸放富酗喳遂篆镰诅卑迢椅壤执撵砖醛物卤齐CH8排序技术CH8排序技术 快速排序的时间性能分析 快速排序的趟数取决于递归的深度 。 最好情况:每一次划分对一个记录定位后,该记录的左侧子表与右侧子表的长度相同,为O(nlog2n)。 最坏情况(正序或逆序):每次划分只得到一个比上一次划分少一个记录的子序列(另一个

文档评论(0)

mv2323 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档