.数据结构 第10章 内部排序.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文档。上传文档
查看更多
数据结构第10章内部排序

* 第十章 内部排序 第十章 内部排序 10.1 排序的基本概念 排序:设含有n个记录的文件{R1,R2,...,Rn},其相应的关键字为{K1,K2,...,Kn},将记录按关键字值非递减(或非递增)顺序排列的过程,称为排序。 对所有的Ki=Kj (i≠j),若排序前Ri领先于Rj,排序后Ri仍领先于Rj,则称该排序方法是稳定的,反之,称为不稳定的。 内部排序:待排序文件的全部记录存放在内存进行的排序,称为内部排序。 外部排序:排序过程中需要进行内外存数据交换的排序,称为外部排序。 10.2 插入排序 一. 直接插入排序 (最简单的排序方法) ⒈ 基本思想:依次将每个待排序的记录插入到一个有序子文件的合适位置(有序子文件记录数增1) 例如:已有待排序文件为: 17,3,25,14,20,9 首先将文件的第一个记录,视为有序文件,然后从第二个记录开始,直到最后一个记录,依次将他们插入到有序文件的合适位置。 2. 排序过程: 3.算法描述: Proc straipass(var r:listtype;i:integer); /* r[n+1]为一维数组,其中r[0]为监视哨,r[1]到r[n]为待排序的n个记录,排序好的记录仍放在r中*/ r[0]:=r[i]; /*r[0]为监视哨,也可做下边循环结束标志*/ j:=i-1; while(r[0].key r[j].key) do 【r[j+1]:=r[j]; j:=j-1; 】 r[j+1]:=r[0] Endp; 4.效率分析: 对于排序的效率分析,主要从比较次数和移动次数两方面着手。 直接插入排序的效率与待排文件的关键字排列有关; 直接插入排序的时间复杂度为O(n2); 直接插入排序是稳定的(这一点由算法中第二个for语句的条件“<”保证的)。 二. 其它插入排序 折半插入排序 1、基本思想: 由于是在有序子文件中确定插入的位置,因此可用折半查找来代替直接插入排序法中的顺序查找,从而可减少比较次数。 2、算法实现 3、效率分析 折半插入算法与直接插入算法相比,需要辅助空间与直接插入排序基本一致;时间上,前者的比较次数比直接插入查找的最坏情况好,最好的情况坏,两种方法的元素的移动次数相同,因此二分插入排序的时间复杂度仍为O(n2)。 折半插入算法与直接插入算法的元素移动一样是顺序的,因此该方法也是稳定的。 二. 希尔排序 1.希尔排序的基本思想:希尔排序(Shell Sort)又称为“缩小增量排序”。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。 ⒉ 依据:⑴若待排序文件基本有序,即文件中具有特性: r[i].key<Max{r[j ]} (其中1≤j<i)的记录数较少, 则文件中大多数记录都不需要进行插入。 ⑵基本有序时,直接插入排序效率可以提高,接近于O(n).。 例如,n=8,数组R的八个元素分别为:17,3,30,25,14,17,20,9。下面给出希尔排序算法的执行过程。 3、性能分析: 当增量h=1时,SHELLSORT算法与INSERTSORT基本一致。 对希尔排序的分析提出了许多困难的数学问题,特别是如何选择增量序列才能产生最好的排序效果,至今没有得到解决。 为什么希尔排序的时间性能优于直接插入排序呢?直接插入排序在文件初态为正序时所需要时间最少,实际上,当文件初基本有序时直接插入排序所需的比较和移动次数均较少。另一面,当n值较小时,n和n2的差别也较小,即直接插入排序的最好时间复杂度O(n)和最坏时间复杂度O(n2)差别不大。在希尔排序时增量较大,分组较多,每组的记录数目少,故各组内直接插入较快,后来增量di逐渐缩小,分组数逐渐增多,而各组的记录数目逐渐减少,但由于文件较近于有序状态,所以新的一趟排序过程也较快。因此,希尔排序在效率上较直接接入排序有较大的改进。 4.希尔排序的特点 ⑴ 子文件(子序列)的构成不是简单地“逐段分割”,而是将相隔某个“增量”的记录组成一个子文件。 ⑵ 增量序列应是递减,且最后一个必须为1。 ⑶ 希尔排序法是不稳定的(由于希尔排序对每个子序列单独比较,在比较时进行元素移动,有可能改变相同关键字元素的原始顺序,因此希尔排序是不

文档评论(0)

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

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

1亿VIP精品文档

相关文档