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

[工程科技]数据结构 排序.ppt

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

第8章 排序 排序 排序(sorting)是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。 由于待排序的记录数量不同,使得排序过程中涉及的存储器不同,可将排序方法分为两大类:一类是内部排序,指的是待排序记录存放在计算机存储器中进行的排序过程;另一类是外部排序,指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中对外存进行访问的排序过程。 8.2 内部排序法——交换式排序 内部排序中的交换式排序,是运用数值比较后,依判断规则对数据位置进行交换,以达到排序的目的。 交换式排序分为两种: 冒泡排序法 快速排序法 8.3 内部排序法——选择式排序 内部排序中的选择式排序,是从欲排序的数据中,按指定规则选出某一元素,经过和其他元素重整,再依原则交换位置后达到排序的目的。 选择式排序分为两种: 选择排序法 累堆排序法 8.4 内部排序法——插入式排序 内部排序中的选择式排序,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 插入式排序分为两种: 插入排序法 希尔排序法 二叉树排序法 8.5 外部排序——合并排序法 将待排序的线性表看成N个长度为1得已排序有序子集。把线性表中相邻元素构成的子表加以合并,得到N/2个长度为2的有序子表;接着再把这N/2个有序子表成对地加以合并;如此进行下去,直到得到一个长度为N的有序表。 8.4.1 插入排序法 1.插入排序的基本思想 插入排序(Straight Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。 2.插入的算法实现 void insertsort(ElemType R[],int n) //待排序元素用一个数组R表示,数组有n个元素 { for ( int i=1; in; i++) //i表示插入次数,共进行n-1次插入 { ElemType temp=R[i]; //把待排序元素赋给temp int j=i-1; while ((j=0) (tempR[j])) { R[j+1]=R[j]; j--; } // 顺序比较和移动 R[j+1]=temp;} } 例如,n=6,数组R的六个排序码分别为:17,3,25,14,20,9。它的插入排序的执行过程如图8-5所示。 图8-5 插入排序示例 3.插入排序的效率分析 从上面的叙述可以看出,插入排序算法十分简单。那么它的效率如何呢?首先从空间来看,它只需要一个元素的辅助空间,用于元素的位置交换。从时间分析,首先外层循环要进行n-1次插入,每次插入最少比较一次(正序),移动两次;最多比较i次,移动i+2次(逆序)(i=1,2,…,n-1)。若分别用Cmin ,Cmax 和Cave表示元素的总比较次数的最小值、最大值和平均值,用Mmin ,Mmax 和Mave表示元素的总移动次数的最小值、最大值和平均值,则上述插入算法对应的这些量为: Cmin=n-1 M min=2(n-1) Cmax=1+2+…+n-1=(n2-n)/2 M max=3+4+…+n+1=(n2+3n-4)/2 Cave=(n2+n-2)/4 M ave=(n2+7n-8)/4 因此,插入排序的时间复杂度为O(n2)。 插入算法的元素移动是顺序的,该方法是稳定的。 8.4.2希尔排序法 1.希尔排序的基本思想 希尔排序(Shell Sort)又称为“缩小增量排序”。是1959年由D.L.Shell提出来的。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行插入排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次插入排序。因为插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。 2.希尔排序的效率分析 虽然我们给出的算法是三层循环,最外层循环为log2n数量级,中间的for循环是n数量级的,内循环远远低于n数量级,因为当分组较多时,组内元素较少;此循环次数少;当分组较少时,组内元素增多,但已接近有序,循环次数并不增加。因此,希尔排序的时间复杂性在O(nlog2n)和O(n2 )之间,大致为O(n1.3)。 例如,n=8

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档