[计算机软件及应用]数据结构1.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文档。上传文档
查看更多
[计算机软件及应用]数据结构1

概述 插入排序 快速排序 选择排序 归并排序 小结 概 述 排序:将一组杂乱无章的记录按一定的规律顺次排列起来。 关键字(key): 通常数据记录有多个属性域,即多个数据成员组成,其中有一个属性域可用来区分记录,作为排序依据。该域即为关键字。 主关键字: 如果在待排序记录序列中各个记录的关键字互不相同,这种关键字即主关键字。按照主关键字进行排序,排序的结果是唯一的。 次关键字:待排序记录序列中有些记录的关键字可能相同,这种关键字称为次关键字。按照次关键字进行排序,排序的结果可能不唯一。 排序算法的稳定性: 如果在记录序列中有两个记录R[i]和R[j],它们的关键字 k[i] == k[j],且在排序之前,记录R[i]排在R[j]前面。如果在排序之后,记录R[i]仍在记录R[j]的前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。 内排序与外排序: 内排序是指在排序期间数据记录全部存放在内存的排序;外排序是指在排序期间全部记录个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内、外存之间移动的排序。 排序的时间开销: 排序的时间开销是衡量算法好坏的最重要的标志。排序的时间开销可用算法执行中的记录比较次数与记录移动次数来衡量。各节给出算法运行时间代价的大略估算一般都按平均情况进行估算。对于那些受记录关键字序列初始排列及记录个数影响较大的,需要按最好情况和最坏情况进行估算。 算法执行时所需的附加存储: 评价算法好坏的另一标准。 待排序记录的数据类型说明: #define MAXSIZE 20 typedef int KeyType; typedef struct{ KeyType key; InfoType otherinfo; }RedType; typedef struct{ RedType r[MAXSIZE]; int length; }SqList; 插入排序 (Insert Sorting) 直接插入排序的基本思想是:当插入第i (i ? 1) 个记录时,前面的R[1], R[2], …, R[i-1]已经排好序。这时,用R[i]的关键字与R[i-1], R[i-2], …的关键字顺序进行比较,找到插入位置即将R[i]插入,原来位置上的记录向后顺移。 保存记录L.r[i]的副本; 监视下标j是否越界,自动控制循环结束 直接插入排序的算法简洁,容易实现。从时间来看,排序的基本操作为:比较两个记录的大小和移动记录。其中: ? 最小比较次数:Cmin = n-1 = O(n) ? 最大比较次数:Cmax =(2+3+…+n)=(n+2)(n-1)/2 = O(n2 ) ? 最小移动次数:Mmin = 0 ? 最大移动次数:Mmax = (2+1 + 3+1 + … + n+1) = O(n2) 若待排序记录序列中出现各种可能排列的概率相同,则可取上述最好情况和最坏情况的平均情况。在平均情况下的关键字比较次数和记录移动次数约为 n2/4。因此,直接插入排序的时间复杂度为 o(n2)。 关键字比较次数和记录移动次数与记录关键字的初始排列有关。 从空间看,直接插入排序算法只需一个记录的辅助空间。 直接插入排序是一种稳定的排序方法。 折半插入排序 (Binary Insertsort) 基本思想: 设在顺序表中有一 个记录序列 R[1], R[2], …, R[n]。其中,R[1], R[2], …, R[i-1] 是已经排好序的记录。 在插入 R[i] 时,利用折半搜索法寻找 R[i] 的插入位置。 算法分析: 折半插入排序所需要的关键字比较次数与待排序记录序列的初始排列无关,仅依赖于记录个数。在插入第 i 个记录时,需要经过 ?log2i? +1 次关键字比较,才能确定它应插入的位置。将 n 个记录用折半插入排序所进行的关键字比较次数为O(nlog2n) . 折半插入排序的时间复杂度仍为O(n2) 当 n 较大时,总的关键字比较次数比直接插入排序的最坏情况要好得多,但比其最好情况要差。 在记录的初始排列已经按关键字排好序或接近有序时,直接插入排序比折半插入排序执行的关键字比较次数要少。折半插入排序的记录移动次数与直接插入排序相同,依赖于记录的初始排列。 折半插入排序是一个稳定的排序方法。 希尔排序 (Shell Sort) 从对直接插入排序的分析可知,其时间复杂度为O(n2), 但是当待排序记录处于“基本有序”状态或当n值较小时,直接插入排序的效率可大大提高。Shell 排序方法正是基于这两点考虑对直接插入排序加以改进而提出的一种插入排序算法。 Shell 排序方法是一种“逐渐缩小插入间隔”的插入排序方法,在时间

文档评论(0)

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

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

1亿VIP精品文档

相关文档