数据结构第9章内部排序解析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构(C语言版) 第9章 内部排序 本章主要知识点 插入排序 交换排序 选择排序 归并排序 基数排序 排序的基本概念 排序是将一批(组)任意次序的数据元素(或记录)重新排列成按关键字有序的序列的过程; 定义:给定一组记录序列: , 其相应的关键字序列是 。确定 1,2,…,n的一个排列 ,使 其相应的关键字满足如下非递减(或非递 增)关系: 的序列 。 主关键字唯一标识记录 次关键字不能唯一标识记录 若记录序列中有两个或两个以上关键字相等的记录:Ki=Kj(ij) ,且在排序前Ri先于Rj,排序后的记录序列仍然是Ri先于Rj,称该排序方法是稳定的,否则是不稳定的。 待排序记录数较少:所有记录都存放在内存中进行排序,称为内部排序; 待排序的记录数太多:所有记录不可能同时存放在内存中,排序过程中必须在内、外存之间进行数据交换,称为外部排序。 对内部排序地而言,两种基本操作:比较和移动。比较是指比较两个关键字的大小;移动是指存储位置的移动,根据关键字的大小,记录从一个位置移到另一个位置。 待排序记录类型定义: #define MAX_SIZE 100 typedef int KeyType ; typedef struct RecType { KeyType key ; /* 关键字 */ infoType otherinfo ; /* 其他域 */ }RecType ; typedef struct { RecType R[MAX_SIZE] ; int length ; }Sqlist ; 评价排序算法的重要标准: (1)排序的执行时间:排序是数据处理中经常执行的一种操作,往往属于系统的核心部分,因此排序算法的时间开销是衡量其好坏的最重的标志; (2)排序所需要的辅助空间:辅助存储空间是指在待排序的记录个数一定的条件下,除了存放待排序记录占用的存储空间之外,执行算法所需要的其他存储空间。若排序算法所需的辅助空间不依赖问题的规模,即空间复杂度是O(1),则称排序方法是就地排序,否则是非就地排序。 插入排序 插入排序是一类借助“插入”操作进行排序的方法,其主要思想是:每次将一个待排序的记录按其关键字的大小插入到一个已经排好序的有序序列中,直到全部记录排好序。 1 直接插入排序 (Straight Insertion Sort) 基本思想:将待排序记录Ri插入到已排好序的记录表(R1,R2,…,Ri-1)中,得到一个新的、记录数增加1的有序表。 算法步骤: (1)将整个待排序的记录序列划分成有序区和无序区,初始时有序区为待排序记录序列的第一个记录,无序区包括所有剩余待排序的记录; (2)将无序区的第一个记录插入到有序区的合适位置中,从而使无序区减少一个记录,有序区增加一个记录; (3)重复执行(2),直到无序区中没有记录为止。 void InsertSort(SqList *L) { int i, j ; for (i=2; i=L-length; i++) { L-R[0]=L-R[i]; j=i-1; /*设置哨兵*/ while( LT(L-R[0].key, L-R[j].key) ) { L-R[j+1]=L-R[j]; j--; } /*查找插入位置*/ L-R[j+1]=L-R[0]; /*插入到相应位置*/ } } R[0] 的作用: (1) 不需要增加辅助空间:当前待插入的记录R[i]会因为记录的后移而被占用,这时可以将它放到R[0]中保存; (2) 保证查找插入位置的内循环总可以在超出循环边界之前找到一个等于当前记录的记录,起“哨兵监视”作用,避免在内循环中每次都要判断j是否越界。特别适合于待插入记录的关键字值小于有序区的所有记录的关键字值的情况。 算法分析: ⑴ 最好情况:待排序记录按关键字从小到大排列,算法中的内循环无须执行,每一趟排序时,关键字比较1次,记录不需移动。所以整个排序的关键字比较次数为n-1,记录移动次数为0。 ⑵ 最坏情况:待排序记录按关键字从大到小排列,每一趟排序时,算法中的内循环体执行i-1次,关键字比较次数i次,记录移动次数i+1。 一般地,认为待排序的记录在各个位置的插入概率相同,则取以

文档评论(0)

武神赵子龙 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档