- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构-选择排序.ppt
* 选择排序(Selection sort) 选择排序(Selection sort)是以选择为基础的一种常用排序方法,从记录的无序子序列中“选择”关键字最小或最大的记录,并将其加入到有序子序列的一端,以增加记录的有序子序列的长度。它也有几种不同的实现方法,这里仅介绍简单选择排序、树形排序和堆排序。 1. 简单选择排序 (1)算法描述 简单选择排序算法的基本思路:对于一组关键字(Kl,K2,…,Kn),将其由小到大进行排序,首先从Kl,K2,…,Kn中选择最小值,假设是Kk,则将Kk与K1对换;然后从K2,K3,…,Kn中选择最小值Kk+1,再将Kk+1与K2对换。如此进行选择和调换,对第i趟选择排序,进行n-i次关键字比较,从n-i+1个记录中选出关键字最小的记录,并与第i个记录交换。令i从1至n-1,进行n-1趟选择排序,一个由小到大的有序序列就形成了。 例1 设有一组关键字[49,39,66,49*,76,11,27,96],这里n=8。试用简单选择排序方法,将这组记录由小到大进行排序。其排序过程如图所示, 算法实现如下: void SelectSort(SqList L) { /* 对顺序表L作简单选择排序。*/ int i , j; RedType temp; for (i=1; iL.length; ++i) { /* 选择第i小的记录并交换到位*/ j = SelectMinKey(L, i); /* 在L.r[i..L.length]中选择key最小的记录*/ if (i!=j) /* L.r[i]←→L.r[j]; 与第i个记录交换*/ {temp=L.r[i]; L.r[i]=L.r[j]; L.r[j]=temp; } } } / * SelectSort*/ (2)算法分析 在简单选择排序中,无论待排序的记录初始序列是否有序,都需要执行n(n-1)/2次关键字的比较操作。如果待排序的记录初始序列就是已经排好序的正列,则无须移动记录,因为每个元素都位于其最终位置上了;而如果待排序的记录初始序列是逆序,即在最坏情况下,则要做3(n-1)次记录移动。所以,简单选择排序的时间复杂度是O(n*n)。 由上面的例1很显然看到,49在排序前位于49*的前面,而经简单选择排序后却位于49*后面了,它们的相对位置发生了颠倒,因此简单选择排序算法是不稳定排序算法。 3. 堆排序 (1)堆的定义 堆是一个记录序列{k1,k2,…,kn},,对于列表中位置i(编号从1开始)处的记录的关键字ki,当且仅当满足下列关系时,称之为堆。 ki≤k2i 或 ki≥k2i ki≤k2i+1 ki≥k2i+1 ( i = 1,2,…,n/2 ) 其中,每个结点关键字都不小于其子孙结点关键字的堆称为“大根堆”;而每个结点关键字都不小于其子孙结点关键字的堆称为“小根堆”。下面的讨论中以小根堆为例。 判断下列序列是否为堆? ⑴ (100,85,98,77,80,60,82,40,20,15,67) ⑵ (100,98,85,82,80,77,60,40,20,15,67) ⑶ (15,20,40,60,67,77,80,82,85,98,100) 我们已经知道,对于一棵有n个结点的完全二叉树,当它的结点由上而下,自左至右编号之后,编号为1~[n/2]的结点为分支结点,编号大于[n/2]的结点为叶子结点,对于每个编号为i的分支结点,它的左孩子的编号为2i,它的右孩子的编号为2i+1。对于每个编号为i(i>1)的结点,它的双亲的编号为[i/2]。 因此,我们还可以借助完全二叉树来描述堆的概念:若完全二叉树中任一非叶子结点的值均小于等于(或大于等于)其左、右孩子结点的值,则从根结点开始按结点编号排列所得的结点序列就是一个堆。 (2)算法描述 堆顶记录对应完全二叉树的根结点,堆顶记录关键字是所有记录关键字的最值,堆排序就是利用堆的上述特征完成排序的。在输出堆顶的最大(或最小)之后,使得剩余的n-1个记录的序列重新调整为一个堆,于是又得到次大(或次小)值……如此反复执行,直至所以记录都排序为一个有序序列。这就是堆排序(Heap Sort)。 由于初始记录序列不一定满足堆关系,因此堆排序过程大体分两步处理: ① 初建堆。从堆的定义出发,先
您可能关注的文档
- 探索世界与追求真理二轮复习课件.ppt
- 探索世界与追求真理唯物论复习2017.pptx
- 提醒房屋格局改造隐患多-5大雷区需谨慎.pptx
- 支架安全事故原因分析及教训.ppt
- 改造客观世界的任务.ppt
- 政治必修四-辩证唯物论.ppt
- 政治必修四第二单元复习-2.ppt
- 政治:《从客观存在的实际出发》课件.ppt
- 数学竞赛题中客观型试题的求解策略1.ppt
- 数据结构-第6章-树.ppt
- 2025年黑龙江省安全员A证考试试卷带解析附完整答案【易错题】.docx
- 2025年黑龙江省安全员A证考试试卷带解析附完整答案【夺冠】.docx
- 2025年黑龙江省安全员A证考试试卷带解析附完整答案【名师系列】.docx
- 2026-2031年中国果冻行业市场运营态势研究报告.docx
- 2024-2025学年河北省石家庄桥西区达标名校初三3月开学考试英语试题含答案.doc
- 湖北省鄂州市鄂州高中2025年高二下化学期末质量跟踪监视试题含解析.doc
- 2026-2031年中国果冻市场运行态势及发展前景分析报告.docx
- 2025年黑龙江省安全员A证考试试卷带解析附完整答案【名校卷】.docx
- 2025年黑龙江省安全员A证考试试卷带解析附完整答案【典优】.docx
- 绍兴文理学院《对象关系映射技术》2023-2024学年第一学期期末试卷.doc
原创力文档


文档评论(0)