- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构之第23 讲内部排序9.1--9.3
10.1 概述 4. 什么叫内部排序?什么叫外部排序? 6. 顺序存储(顺序表)的抽象数据类型如何表示? 7. 内部排序的算法有哪些? 10.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. “快速排序”是否真的比任何排序算法都快? ( ), 设以首元素为枢轴中心 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 int Partition(SqList L,int low,int high){ //一趟快排 //交换子表 r[low…high]的记录,使支点(枢轴)记录到位,并返回其位置。返回时,在支点之前的记录均不大于它,支点之后的记录均不小于它。 r[0]=r[low]; //以子表的首记录作为支点记录,放入r[0]单元 (续下页) 一趟快速排序算法(针对一个子表的操作) pivotkey=r[low].key; //取支点的关键码存入pivotkey变量 while(low high){ //从表的两端交替地向中间扫描 while(lowhigh r[high].key=pivotkey ) - -high; r[low]=r[high]; //将比支点小的记录交换到低端; while(lowhigh r[low].key=pivotkey) + +low; r[high]=r[low]; //将比支点大的记录交换到高端; } r[low]=r[0]; //支点记录到位; return low; //返回支点记录所在位置。 }//Partition 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 49 ( 08 ,16 ) 21 ( 25* , 49, 25 ) j从高端扫描 寻找小于pivot的元素 i从低端扫描 寻找大于pivot的元素 i=low; j=high;r[0]=r[low]; pivot=r[low].key; i j i j r[j].key=pivot --j; r[i] = r[j]; i j r[i].key=pivot --i; r[j] = r[i]; r[i] = r[0]; return ok; Y Y Y N N N void QSort ( SqList L, int low,
您可能关注的文档
最近下载
- [新疆]2024年新疆高级人民法院生产建设兵团分院_人民检察院聘用制书记员招聘笔试历年典型考题及解题.docx VIP
- Q/GDW 13002.3—2018 10kV变压器采购标准(第3部分:10kV三相干式变压器专用技术规范).pdf VIP
- 储能技术-全套PPT课件.pptx
- 口腔颌面外科登记手册.pdf VIP
- 纪念抗日战争胜利80周年弘扬抗战精神爱国主义教育ppt课件.pptx VIP
- 初中地理教师培训.pptx VIP
- 法学专转本题库及答案.doc VIP
- 山水田园诗训练(1).docx VIP
- 泵房改造施工方案.pdf VIP
- 2025-2026学年初中物理九年级上册(2024)教科版(2024)教学设计合集.docx
文档评论(0)