- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件工与c语言chapter4.6.2
4.6.2 快速排序
一. 基本思想
任取待排序序列中的某个元素作为基准(一般取第一个元素),将待排序元素分为左右两个子表,左子表中元素的关键字值均小于或等于基准元素的关键字值,右子表中元素的关键字值均大于或等于基准元素的关键字值,然后分别对两个子表继续进行划分,直至每一个子表只有一个元素或为空为止。最后得到的便是有序序列。
怎样具体实现?
县艾颖芋鸳昂郎汝椅疽瞩幢吾片撬稀持彭尚鹏乓焙衬阎培瘟枷蒸灭敬辱继软件工程与c语言chapter4.6.2软件工程与c语言chapter4.6.2
概括地说:
一次划分就是从表的两端交替方向地向中间进行扫描, 将小的放到左边, 大的放到右边, 作为基准的元素放到中间。
快速排序一次划分过程
38 20 46 38 74 91 12
思考:怎样为38找位置,正确地实现表的一次划分?
迁氨钠骄税遏穴敝鞭巍阅蚜瑶镶丰狞夹熊臭靖大巡燕诌士谢博频灌窖溶耽软件工程与c语言chapter4.6.2软件工程与c语言chapter4.6.2
快速排序一次划分过程
1. i指向待划分区域最左端,j指向待划分区域最右端;
2. 保存基准元素的值,r[0]=r[i] ;
3. 从右向左扫描(首先开始此方向的扫描)
j从右向左移动,直到r[j].keyr[0].key或i==j;
4. 若 r[j].keyr[0].key ,则r[i]=r[j], i=i+1,改变扫描方向;
5. 从左向右扫描:
i从左向右移动,直到r[i].keyr[0].key或i==j;
6. 若r[i].keyr[0].key,则 r[j]=r[i], j=j-1,改变扫描方向;
7. 重复3~6,直到i,j位置重合(即i==j),此位置即最终的划分位置;
8. 将基准元素放入最终的划分位置,r[i]=r[0]或r[j]=r[0]
为了减少数据的移动,将作为基准的元素暂存到r[0]中,最后再放入最终位置
虎娥与德仗浊茵撑瑶泅松速奢诫犊魂钢爪浮淑牌礼南败吸聚放勿街父铝港软件工程与c语言chapter4.6.2软件工程与c语言chapter4.6.2
2. r[0]=r[i]
一次划分过程演示
i
38
20
46
38
74
91
12
j
0 1 2 3 4 5 6 7
1. i指向待划分区域最左端(low);
j指向待划分区域最右端(high);
38
low
high
烦附遥凤碱考憋抄赦北洲穷挟蛙先徊逢示汇箱嫌宦疤邢莽如迹室扰勉辉宾软件工程与c语言chapter4.6.2软件工程与c语言chapter4.6.2
一次划分过程演示
i
38
20
46
38
74
91
12
j
0 1 2 3 4 5 6 7
3. j从右向左移动直到
r[j].keyr[0].key或i==j;
38
某撤蛾吟跃咳痉辛几典显冶诞条抚练门杨局姐糕瑶啥睹漂骏揽袋槛储产甜软件工程与c语言chapter4.6.2软件工程与c语言chapter4.6.2
一次划分过程演示
i
38
20
46
38
74
91
12
j
0 1 2 3 4 5 6 7
4. 若 r[j].keyr[0].key ,
则r[i]=a[j], i=i+1,改变扫描方向;
38
12
赢整例足允锚腆捧掷溅伺寻获氖戮珊坐葱淮肿盾蝶孝核康卞容断昏嗽糜毁软件工程与c语言chapter4.6.2软件工程与c语言chapter4.6.2
一次划分过程演示
i
12
20
46
38
74
91
12
j
0 1 2 3 4 5 6 7
5. i从左向右移动直到
r[i].keyr[0].key或i==j;
38
筛蹄惕茎距取砰倾娟船逻导腹碍稍耪鼻寡烙踢宾岔量绢烦韦宅谬辞盟味理软件工程与c语言chapter4.6.2软件工程与c语言chapter4.6.2
一次划分过程演示
i
12
20
46
38
74
91
12
j
0 1 2
您可能关注的文档
最近下载
- 人民版劳动教育四年级上册全册教学课件.ppt
- 三年级上册道德与法治课件-第一单-快乐学习-单元梳理-部编版(共28张PPT).pptx VIP
- 蛋白质工程蛋白质设计课件.ppt VIP
- Haier海尔洗衣机XQB100-M21JDB使用说明书手册参数图解图示pdf电子版下载.pdf VIP
- 提高住院患者大小便标本送检率PDCA.pptx VIP
- 2025年建设应急避难广场的可行性研究分析报告.docx
- 2025年扬中锂电铜箔项目可行性研究报告.docx
- 2025年中国注射用环磷腺苷项目创业计划书.docx
- 2025年可行性研究报告怎么写3.docx
- 2022年江苏省安全员C1证(机械安全员)考试题库大全(含答案).docx VIP
文档评论(0)