网站大量收购闲置独家精品文档,联系QQ:2885784924

[学科竞赛]第十章排序.ppt

  1. 1、本文档共114页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[学科竞赛]第十章排序

第十章 排 序 待排序记录的存储方式 1.待排序的一组记录放在地址连续的一组存储单元上,记录间的次序关系由存储位置来决定. 2.待排序的一组记录放在静态链表中.记录之间的次序关系由指针指示.实现排序不需要移动记录,只需要修改指针.(链表排序) 3.待排序的一组记录放在地址连续的一组存储单元上,同时另设一个指示各记录存储位置的地址向量.(地址排序) 直接插入排序过程示例 初始关键字序列 以顺序表作为存储结构的直接插入排序算法 时间复杂度:O(n2) 在最好情况下(正序),元素的移动次数为0,比较次数为n – 1; 在最坏情况下(逆序),元素的移动次数为(n+4)(n-1)/2,比较次数为 (n+2)(n-1)/2 空间复杂度:O(1) 只需要 1 个辅助单元 稳定的排序方法 适用情况 元素数目少,或者元素的初始序列基本有序当待排序的记录个数较多时,大量的比较和移动操作使直接插入排序算法的效率降低。 算法分析: 折半插入排序所需要的关键字比较次数与待排序记录序列的初始排列无关,仅依赖于记录个数。在插入第 i 个记录时,需要经过 ?log2i? +1 次关键字比较,才能确定它应插入的位置。将 n 个记录用折半插入排序所进行的关键字比较次数为O(nlog2n) . 折半插入排序的时间复杂度仍为O(n2) 1. 起泡排序 起泡排序(Bubble Sorting)的基本思想是:将相邻位置的关键字进行比较,若为逆序则交换之。 第i趟排序过程为从L.r[1]至L.r[n-i+1]依次比较相邻两个记录的关键字,并在“逆序”时交换相邻记录,其结果是这n-i+1个记录中关键字最大的记录被交换到第n-i+1的位置上。 整个排序过程终止的条件是“在一趟排序过程中没有进行过交换记录的操作” 起泡排序过程示例 初始关键字序列: 以顺序表作为存储结构的起泡排序算法 起泡排序算法分析 以顺序表作为存储结构的起泡排序算法 时间复杂度:O(n2) 在最好情况下(正序),元素的交换次数为0,比较次数为n – 1; 在最坏情况下(逆序),元素的交换次数为n(n-1)/2,比较次数为 n(n-1)/2 空间复杂度:O(1) 只需要 1 个辅助单元进行交换 稳定的排序方法 适用情况 元素数目少,或者元素的初始序列基本有序 2. 快速排序 快速排序(Quick Sorting)是迄今为止所有内排序算法中速度最快的一种。它的基本思想是:任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左子序列元素的关键字均小于或等于基准元素的关键字,右子序列的关键字则大于基准元素的关键字,然后分别对两个子序列继续进行排序,直至整个序列有序。 算法分析: 从快速排序算法的递归树可知,快速排序的趟数取决于递归树的深度。 如果每次划分对基准记录定位后,该记录的左侧子序列与右侧子序列的长度相同,则下一步将是对两个长度减半的子序列进行排序,这是最理想的情况。 在n个元素的序列中,对一个记录定位所需时间为 O(n)。若设 T(n) 是对 n 个元素的序列进行排序所需的时间,而且每次对一个记录正确定位后,正好把序列划分为长度相等的两个子序列,此时,总的计算时间为: T(n) ? n + 2 T(n/2 ) // 一趟划分比较次数为n-1次 ? n + 2 ( n/2 + 2T(n/4) ) = 2n + 4T(n/4) ? 2n + 4 ( n/4 +2T(n/8) ) = 3n + 8T(n/8) ……… ? n log2n + nT(1) = O(n log2n ) 可以证明,函数quicksort的平均计算时间也是o(nlog2n)。实验结果表明:就平均计算时间而言,快速排序是我们所讨论的所有内排序方法中最好的一个。 最坏的情况下: 即待排序记录序列已经按其关键字从小到大排好序的情况下,其递归树成为单支树,每次划分只得到一个比上一次少一个记录的子序列。这样,必须经过 n-1 趟才能把所有记录定位,而且第 i 趟需要经过 n-i 次关键字比较才能找到第 i 个记录的安放位置,总的关键字比较次数将达到: 其排序速度退化到简单排序的水平,比直接插入排序还慢。 若能更合理地选择基准记录,使得每次划分所得的两个子序列中的记录个数尽可能地接近,可以加速排序速度,但是由于记录的初始排列次序是随机的,这个要求很难办到。 有一种改进办法:取每个待排序记录序列的第一个记录、最后一个记录和位置接近正中的3个记录,取其关键字居中者作为基准记录。 10.4 选择排序 1. 简单选择排序 基本思想: 第一趟在n个记录中选取最小记录作为有序序列的第一个记录,第二趟在n-1个记录中选取最小记录作为有序序列的第二个记录,第i趟

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档