- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构-03排序
第三章 排序 3.1 排序的基本概念 3.2 简单排序方法 3.3 先进法排序方法 3.4 基数排序 3.5 各种排序方法的综合比较 第三章 排序 待排序数据元素(记录)的存储结构: typedef int KeyType //定义关键字类型为整型 typedef struct{ KeyType key; //关键字项 InfoType otherinfo; //其他数据项 }RcdType; //记录类型 本章的排序图例只标出了记录的关键字。 3.1 排序的基本概念 3.1.1 排序的定义 3.1.2 排序的特性—稳定性与不稳定性 3.1.3 排序的分类 3.1.4 内排序的特点 3.1.5 选择排序法 3.1 排序的基本概念 3.1.1 排序的定义 简单定义:排序是按照关键字的非递减或非递增顺序对一组记录重新进行整队(或排列)的操作。 数学定义:假设含有n个记录的序列为: {r1, r2, … ,rn} (3-1) 它们的关键字相应为{k1, k2, … ,kn},对式(3-1)的记录序列进行排序就是要确定序号1,2, …,n的一种排列p1, p2,…,pn使其相应的关键字满足如下的非递增(减)关系: kp1≤ kp2 ≤ … ≤ kpn (3-2) 也就是使式(3-2)的记录序列重新排列成一个按关键字有序的序列{rp1 ≤ rp2 ≤ … ≤ rpn} (3-3) 3.1 排序的基本概念 3.1.2 排序的特性—稳定性与不稳定性 当待排记录中的关键字ki(1,2,…,n)都不相同时,则任何一个记录的无序序列经排序后得到的结果是惟一的。 简单地说,稳定性排序--数据排序过后能使值相同的数据,保持原顺序中之相对位置。反之,则称为“不稳定性排序” 。 若排序的序列中存在两个或两个以上关键字相等的记录时,则排序得到的记录序列的结果不惟一。 假设ki= kj (1≤i ≤n, 1≤j≤n, i≠j ),且在排序前的序列中 ri 领先于rj (即ij ) 。若在排序后的序列中ri 总是领先于rj ,则称所用的排序方法是稳定的;反之,若可能使排序后的序列中 rj领先于ri ,则称所用的排序方法是不稳定的。 3.1.2 排序的特性—稳定性与不稳定性 3.1.3 排序的分类 根据在排序的过程涉及的存储器不同,排序方法可分为两类: 1.内部排序(Internal Sort):在排序进行的过程中不使用计算机外部存储器的排序过程。 选择排序 插入排序 起泡排序 快速排序 归并排序 堆排序 基数排序 2. 外部排序(External Sort):在排序进行的过程中需要对外存进行访问的排序过程。 3.1.4 内排序的特点 待排序记录序列的存储结构: const int MAXSIZE=20 //定义最大顺序表的长度 typedef struct{ RcdType r[MAXSIZE+1];//r[0]闲置或作为“哨兵” int length; //顺序表的真正长度 }SqList; //顺序表类型 内部排序的过程是一个逐步扩大记录的有序序列的过程。通常在排序的过程中,参与排序的记录序列可划分两个区域:有序序列区和无序序列区,其中有序序列区的的记录已按关键字非递减有序排列。 使有序序列中记录的数目至少增加一个的操作称为一趟排序。 3.1.5 选择排序法 思想:在排序过程序中,依次从待排序的记录序列中选择出关键字值最小的记录、关键字值次小的记录、…,并分别有序序列中的第1个位置、第二个位置、……,最后剩下一个关键字值最大的记录位于序列的最后一个位置,从而使待排序的记录序列成为按关键字值由小到大排列的的有序序列。 3.1.5 选择排序法 一趟排序算法: void SelectPass(SqList L,int i) { RcdType W; int j,k; j=i; // j指示无序序列中第一个记录的位置 for(k=i+1;k=L.length;k++) if(L.r[k].keyL.r[j].key) j=k; //只记录位置 if(i!=j) // 交换R[j]和R[i]; { W=L.r[i]; L.r[i]=L.r[j]; L.r[j]= W; } // L.r[i]←→ L.r[j]; } // SelectPass 3.1.5 选择排序法 整个算法: void SelectSort(SqList L) { RcdType W; for(i=1;iL.length;i++){ j=i; // j指示无序序列中第一个记录的位
您可能关注的文档
最近下载
- 高职入学考试英语复习指导丛书—语法专项训练教学课件(第四章数词).pptx VIP
- 2025年秋统编版语文三年级上册全册教学课件(课标版).pptx
- 2025年最新人教版小学二年级数学上册教学计划及进度表(新课标,新教材).docx
- 小区监控系统设计方案.pptx VIP
- 丹方模拟器1.32(新增龙宫草药)(1).xlsx VIP
- 等一朵花开读书分享PPT.pptx VIP
- 2012国际严重脓毒症和脓毒症休克治疗指南(SSC)..doc VIP
- 【免费】小学一年级数学“凑十法”练习题100道 .pdf VIP
- 幼儿园装修工程实施方案(模板范文).docx
- 高中物理必修二学历案.docx VIP
文档评论(0)