排序类算法技术总结.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文档。上传文档
查看更多
概述 插入排序 交换排序 选择排序 归并排序 基数排序 外排序 小结;概述;主关键码: 如果在数据表中各个对象的关键码互不相同,这种关键码即主关键码。按照主关键码进行排序,排序的结果是唯一的。 次关键码: 数据表中有些对象的关键码可能相同,这种关键码称为次关键码。按照次关键码进行排序,排序的结果可能不唯一。 排序算法的稳定性: 如果在对象序列中有两个对象r[i]和r[j],它们的关键码 k[i] == k[j],且在排序之前,对象r[i]排在r[j]前面。如果在排序之后,对象r[i]仍在对象r[j]的前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。;内排序与外排序: 内排序是指在排序期间数据对象全部存放在内存的排序;外排序是指在排序期间全部对象个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内、外存之间移动的排序。 排序的时间开销: 排序的时间开销是衡量算法好坏的最重要的标志。排序的时间开销可用算法执行中的数据比较次数与数据移动次数来衡量。各节给出算法运行时间代价的大略估算一般都按平均情况进行估算。对于那些受对象关键码序列初始排列及对象个数影响较大的,需要按最好情况和最坏情况进行估算。;静态排序: 排序的过程是对数据对象本身进行物理地重排,经过比较和判断,将对象移到合适的位置。这时,数据对象一般都存放在一个顺序的表中。 动态排序: 给每个对象增加一个链接指针,在排序的过程中不移动对象或传送数据,仅通过修改链接指针来改变对象之间的逻辑顺序,从而达到排序的目的。 算法执行时所需的附加存储: 评价算法好坏的另一标准。 静态排序过程中所用到的数据表类定义,体现了抽象数据类型的思想。;插入排序 (Insert Sorting);;;16;25;最好情况下,排序前对象已经按关键码大小从小到大有序,每趟只需与前面的有序对象序列的最后一个对象的关键码比较 1 次,移动 2 次对象,总的关键码比较次数为 n-1,对象移动次数为 2(n-1)。 最坏情况下,第 i 趟时第 i 个对象必须与前面 i 个对象都做关键码比较,并且每做 1 次比较就要做 1 次数据移动。则总的关键码比较次数KCN和对象移动次数RMN分别为;若待排序对象序列中出现各种可能排列的概率相同,则可取上述最好情况和最坏情况的平均情况。在平均情况下的关键码比较次数和对象移动次数约为 n2/4。因此,直接插入排序的时间复杂度为 o(n2)。 直接插入排序是一种稳定的排序方法。;折半插入排序 (Binary Insertsort);当 n 较大时,总关键码比较次数比直接插入排序的最坏情况要好得多,但比其最好情况要差。 在对象的初始排列已经按关键码排好序或接近有序时,直接插入排序比对分插入排序执行的关键码比较次数要少。对分插入排序的对象移动次数与直接插入排序相同,依赖于对象的初始排列。 对分插入排序是一个稳定的排序方法。;链表插入排序;;;希尔排序 (Shell Sort);;;;交换排序 ( Exchange Sort );;;第 i 趟对待排序对象序列v[i-1], v[i], ?, v[n-1]进行排序,结果将该序列中关键码最小的对象交换到序列的第一个位置(i-1),其它对象也都向排序的最终位置移动。 当然在个别情形下,对象有可能在排序中途向相反的方向移动。 这样最多做n-1趟起泡就能把所有对象排好序。; ;快速排序 (Quick Sort); ;;;;算法分析; T(n) ? cn + 2 t(n/2 ) // c是一个常数 ? Cn + 2 ( cn/2 + 2t(n/4) ) = 2cn + 4t(n/4) ? 2cn + 4 ( cn/4 +2t(n/8) ) = 3cn + 8t(n/8) ……… ? Cn log2n + nt(1) = o(n log2n ) 可以证明,函数quicksort的平均计算时间也是o(nlog2n)。实验结果表明:就平均计算时间而言,快速排序是我们所讨论的所有内排序方法中最好的一个。 ;快速排序是递归的,需要有一个栈存放每层递归调用时的指针和参数。 最大递归调用层次数与递归树的深度一致,理想情况为 ?log2(n+1)? 。因此,要求存储开销为 o(log2n)。 在最坏的情况,即待排序对象序列已经按其关键码从小到大排好序的情况下,其递归树成为单支树,每次划分只得到一个比上一次少一个对象的子序列。这样,必须经过 n-1 趟才能把所有对象定位,而且第 i 趟需要经过 n-i 次关键码比较才能找到第 i 个对象的安放位置,总的关键码比较次数将达到;其排序速度退化到简单排序的水平,比直接插入排序还慢。占用附加存储(即栈)将达到o(n)。 若能

文档评论(0)

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

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

1亿VIP精品文档

相关文档