数据结构PPT(第章 排序).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文档。上传文档
查看更多
数据结构PPT(第章 排序).ppt

大根堆和小根堆 (a)小根堆 (b)大根堆 09 65 17 23 45 78 87 53 31 87 53 78 45 65 09 31 17 23 (09,17,65,23,45,78,87,53,31) (87,78,53,45,65,09,31,17,23) ⑴ 以初始关键字序列,建立堆; ⑵ 输出堆顶元素; ⑶ 调整余下的元素,使其成为一个新堆; ⑷ 重复⑵、⑶ n 次,得到 一个有序序列。 关键要解决⑴和⑶,即: 如何由一个无序序列建成一个堆? 如何在输出堆顶元素之后调整剩余元素成为一个新的堆? 堆排序基本思想 调整方法(以小根堆为例) 13 27 38 49 76 65 49 97 97 27 38 49 76 65 49 13 27 97 38 49 76 65 49 13 27 49 38 49 76 65 97 13 ⑴ 将堆顶元素和堆的最后一个元素位置交换; ⑵ 然后以当前堆顶元素和其左、右子树的根结点进行比较(此时,左、右子树均为堆),并与值较小的结点进行交换; ⑶ 重复⑵,继续调整被交换过的子树,直到叶结点或没进行交换为止。称这个调整过程为筛选。 安徽理工大学 第10章 内部排序 理解和熟悉各种内部排序的基本思想和过程; 掌握内部排序算法的时间复杂度的分析方法和结论; 要求能根据各种内部排序方法的优缺点及不同场合选择合适的排序方法。 学习要点 10.1 概 述 排序:设含有n个记录的文件{R1,R2,...,Rn},其相应的关键字为{ K1,K2,...,Kn },将记录按关键字值非递减(或非递增)顺序排列的过程,称为排序。 对所有的Ki=Kj (i≠j),若排序前Ri领先于Rj,排序后Ri仍领先于Rj,则称该排序方法是稳定的,反之称为不稳定的。 内部排序:待排序文件的全部记录存放在内存进行的排序,称为内部排序。 外部排序:排序过程中需要进行内外存数据交换的排序,称为外部排序。 10.1 概 述 在排序过程中,通常进行两种基本操作: (1)比较两个关键字大小; (2)将记录从一个位置移到另一个位置。 约定: 待排序的一组记录存放在地址连续的一组存储单元中,它类似于线性表的顺序存储结构。 待排的记录的数据类型定义如下: typedef struct { int key; InfoType otherinfo; } RedType; typedef struct { RedType r[MAXSIZE + 1 ]; int length; } SqList; 10.2 插入排序 10.2.1 直接插入排序 基本思想:将一个记录插入到已排好序的有序表中,得到一个新的、记录数增1的有序表。 例如:已知待排序的一组记录为49、38、65、97、40、13、27。 假设在排序过程中,前4个记录已按关键字递增的次序重新排列, 构成一个含4个记录的有序序列{38,49,65,97 },现要将关键字为40的记录插入该序列中,则按从后向前的顺序对该序列进行查找,由于38 40 49,则76应插入到65和97之间,从而得到新的有序序列{ 38,40,49,65,97 },称该过程为一趟直接插入排序。 直接插入排序方法 方法:将序列中的第一个记录看成是一个有序的子序列,从第二个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止。 Status InsertSort ( SqList L ) { for( i=2; i=L.length; ++i ) if( LT( L.r[i].key, L.r[i-1].key ) ) { L.r[0] = L.r[i]; //复制为哨兵 L.r[i] = L.r[i-1]; for( j=i-2; LT( L.r[0].key, L.r[j].key ); --j ) L.r[j+1] = L.r[j]; //记录后移 L.r[j+1] = L.r[0]; } //插入到正确位置 } //InsertSort L.r[0] [初始关键字]: (49) 38 65 97 76 13 27 49* i=2: (38)(38 49) 65 97 76 13 27 49* i=3: (65)(38 49 65) 9

文档评论(0)

czy2014 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档