第14章 排序 计算机软件技术知识基础教程 .pptVIP

第14章 排序 计算机软件技术知识基础教程 .ppt

  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文档。上传文档
查看更多
第14章 排序 计算机软件技术知识基础教程 .ppt

14.1 排序的基本概念 14.2 插入排序 14.3 选择排序 14.4 交换排序 14.5 归并排序 ;第14章 排 序; 排序的方法很多,可按不同的原则进行分类。根据排序文件所处的位置不同,可将排序分为内部排序和外部排序。内部排序是指整个排序过程都在内存中进行的排序;外部排序是指当排序的文件很大,以致内存不足以存放全部记录,在排序过程中,除使用内存外,还要借助于对外存的访问。内部排序适用于记录个数不很多的小文件,外部排序则适用于记录个数太多,不能一次将其全部放入内存的大文件。按所用策略不同,内部排序方法又可分为插入排序、选择排序、交换排序、归并排序及基数排序等几大类。 每一种内部排序方法均可在不同的存储结构上实现。通常,文件可有下列三种存储结构: (1) 以一维数组作为存储结构,排序过程是对记录本身进行物理重排,即通过比较和判定,把记录移到合适的位置。; (2) 以链表作为存储结构,排序过程中无须移动记录,仅需修改指针即可,通常把这类排序称为表排序。 (3) 有的排序方法难以在链表上实现,此时,若仍需要避免排序过程记录的移动,可以为文件建立一个辅助表(如索引表),这样,排序过程中只需对这个辅助的表目进行物理重排,而不移动记录本身。 要在繁多的排序方法中简单地评价哪种最好以便能普遍选用是很困难的。判断排序算法好坏的标准主要有两条:一是执行算法所需要的时间,二是执行算法所需要的附加空间。另外算法本身的复杂程度也是要考虑的一个因素。由于排序是经常使用的一种运算,其所需的附加空间量一般都不大,所以排序的时间代价是衡量算法好坏的最重要的标志。排序的时间代价主要是指执行算法中关键字的比较次数和记录的移动次数,因此,在下面讨论各种排序算法时,我们将给出各算法的比较次数和移动次数。; 在本章中,假设记录数组作为文件的存储结构,关键字为整数,文件类型说明如下: typedef struct /* 定义记录为结构类型 */ { int key; /* 关键字域 */ datatype other; /* 记录的其他域 */ } rectype; rectype R[n]; /* R为记???类型的数组 */ 其中:n为文件的记录总数。; 算法采用的是查找比较操作和记录移动操作交替进行的方法。具体做法是将待插入记录R[i]的关键字依次与有序区中记录R[j](j=i?1, i?2, …, 1)的关键字进行比较,若R[j]的关键字大于R[i]的关键字,则将R[j]后移一个位置;若R[j]的关键字小于或等于R[i]的关键字,则查找过程结束,j+1即为R[i]的插入位置。因为关键字比R[i]大的记录均已后移,故只要将R[i]插入该位置即可。 算法中还引进了一个附加记录R[0],其作用有两个:① 进入查找循环之前,它保存了R[i]的副本,使得不致于因记录的后移而丢失R[i]中的内容;② 在while循环中“监视”下标变量j是否越界,以避免循环内每次都要检测j是否越界。因此,我们将R[0]称为“监视哨”,这使得测试循环条件的时间大约减少一半。希望读者能掌握这种技巧。; 根据上述算法,我们用一例子来说明直接插入排序的过程。设待排序的文件有八个记录,其关键字分别为47, 33, 61, 82, 72, 11, 25, 47?,直接插入排序过程如图14.1所示。 直接插入排序的算法分析如下: 整个排序过程只有两种运算,即比较关键字和移动记录。算法中的外循环表示要进行n?1趟插入排序,内循环则表明每一趟排序所需进行的关键字的比较和记录的后移。在文件正序(即关键字递增有序)时,每趟排序的关键字比较次数为1,记录移动次数是2次,即总的比较次数Cmin=n?1,总的移动次数Mmin=2(n?1);当文件逆序时,关键字的比较次数和记录移动次数均取最大值。对于要插入的第i个记录,均要与前i?1个记录及“监视哨”的关键字进行比较,即每趟要进行i次比较;从移动记录的次数来说,每趟排序中除了上面提到的两次移动外,还需将关键字大于R[i]的记录后移一个位置。因此,总的比较次数和记录的移动次数为;图14.1 直接插入排序示例; Cmax= =(2+n)(n?1)/2=O(n2) Mmax= =(4+n)(n?1)/2=O(n2) ; 14.2.2 希尔排序 希尔排序(Shell’s method)又称为“

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档