- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第9章排序(第25-27讲)
快速排序 基本思想:找一个记录,以它的关键字作为“枢轴”,凡其关键字小于枢轴的记录均移动至该记录之前,反之,凡关键字大于枢轴的记录均移动至该记录之后。 致使一趟快速排序之后,记录的无序序列R[s..t]将分割成两部分:R[s..i-1]和R[i+1..t],且 R[j].key≤ R[i].key ≤ R[j].key (s≤j≤i-1) 基准 (i+1≤j≤t)。 快速排序是对冒泡排序的改进。 s t low high 设 R[s]=52 为枢轴(或基准) 将 R[high].key 和 枢轴的关键字进行比较,要求R[high].key ≥ 枢轴的关键字 将 R[low].key 和 枢轴的关键字进行比较,要求R[low].key ≤ 枢轴的关键字 high 23 low 80 high 14 low 52 例如 R[0] 52 low high high high low 思考:一趟快速排序的结果? 快速排序首先对无序的记录序列进行“一次划分”,之后分别对分割所得两个子序列“递归”进行快速排序。 无 序 的 记 录 序 列 无序记录子序列(1) 无序子序列(2) 枢轴 一次划分 分别进行快速排序 例:请对关键字序列52,49,80,36,14,58,61,97, 23,75进行快速排序。 练习:对关键字序列56 23 15 96 53进行快速排序. 先对 R[s].key, R[t].key 和 R[?(s+t)/2?].key,进行相互比较,然后取关键字为 “三者之中”的记录为枢轴记录。 快速排序的时间分析 若待排记录的初始状态为按关键字有序时,快速排序将蜕化为冒泡排序,其时间复杂度为O(n2)。 为避免出现这种情况,可在进行一次划分之前,进行“预处理”,即: 快速排序的时间复杂度为O(nlog2n) 不稳定的排序方法 例:对16,18,*18,15排序 例: 用某种排序方法对关键字序列{25,84,21,47,15,27,68,35,20}进行排序时,元素序列的变化情况如下: (1)20,15,21,25,47,27,68,35,84 (2)15,20,21,25,35,27,47,68,84 (3)15,20,21,25,27,35,47,68,84 则所采用的排序方法是() 快速排序 例: 快速排序方法在( )情况下最不利于发挥其长处。 A.要排序的数据量太大 B.要排序的数据中含有多个相同值 C.要排序的数据已基本有序 D.要排序的数据个数为奇数 C 9.4 选择排序 选择排序(Selection Sort)的基本思想是:不断从待排记录序列中选出关键字最小的记录插入已排序记录序列的后面,直到n个记录全部插入已排序记录序列中。 本节主要介绍两种选择排序方法:简单选择排序和堆排序。 简单选择排序 假设排序过程中,待排记录序列的状态为: 有序序列R[1..i-1] 无序序列 R[i..n] 第 i 趟 简单选择排序 从中选出 关键字最小的记录 有序序列R[1..i] 无序序列 R[i+1..n] void Select_Sort(RecType R[],int n) { int i,j,k; RecType temp; for(i=1;in;i++) { k=i; //假定起始位置为最小记录的位置 for(j=i+1;j=n;j++) //查找最小记录 if(R[j].keyR[k].key) k=j; if(i!=k) //如果k不是假定位置,则交换 {L.R[0]=L.R[k]; /*R[0]作为辅助存储空间*/ L.R[k]=L.R[i]; L.R[i]= L.R[0]; } } } 本算法中有两重循环:外循环用于控制排序的次数,内循环用于查找当前待排记录序列中关键字最小的记录。 例: 用简单选择排序方法对关键字序列{25,84,21,47,15,27,68,35,20}进行升序排序 练习:用简单选择排序方法对关键字序列{15,13,*15,11,17}进行升序排序 简单选择排序是不稳定的排序方法 时间性能分析 对 n 个记录进行简单选择排序,所需进行的关键字间的比较次数总计为: 移动记录的次数,最小值为 0, 最大值为3(n-1) 。 时间复杂度为O(n2)。 堆排序 堆排序借助于完全二叉树结构进行排序,是一种树型选择排序。 基本思想:在直接选择排序时,为从n个关键字中选出最小值,需要进行n-1次比较,然后又在剩下的n-1个关键字中选出次最小值,需要n-2次
您可能关注的文档
- 数字图像处理期末考题.doc
- 数字图像处理模拟题(双语课).doc
- 数字图像处理模拟试卷及答案.doc
- 数字图像处理教程(matlab版).ppt
- 数字图像处理技术实验四报告.doc
- 数字图像处理第01章 绪论.ppt
- 数字图像处理第三章答案【1-11】.doc
- 数字图像处理技术实验三报告.doc
- 数字图像处理第六七章new.ppt
- 数字图像处理第四次作西安交大.docx
- 岸基供电系统 第4部分:工频电源.pdf
- 人教版八下英语Unit 5 What were you doing when the rainstorm came_测试卷.docx
- 热带作物品种区域试验技术规程 木薯.pdf
- 草原防火阻隔带建设技术规程.pdf
- 渔用气胀救生筏技术要求和试验方法-.pdf
- 浙江省杭州市2024-2025学年八年级下学期期中考试英语试卷(含答案).docx
- 重庆市渝北区六校联盟2024-2025学年九年级下学期期中教学大练兵语文试卷.docx
- 食品安全-花椒籽油 (2).pdf
- 2025年海博思创分析报告:储能集成“小巨人”,国内外业务进展可期.pdf
- 地理标志产品 宽城板栗.pdf
文档评论(0)