第十章内部排序研究.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文档。上传文档
查看更多
黑龙江科技学院计算机系;第十章 内部排序;10.1 概述 ; 3.排序分类 按待排序记录所在位置: 内部排序:待排序记录存放在内存的排序过程; 外部排序:除访问内存外,排序过程中需对外存进行访问的排序过程。 按排序过程中依据的不同原则: 插入排序:直接插入排序、希尔排序等; 交换排序:起泡排序、快速排序; 选择排序:简单选择排序、堆排序等; 归并排序:2-路归并排序。;10.1 概述 ;待排序记录的数据类型统一设置如下: #define MAXSIZE 20 //一个用作示例的小顺序表的最大长度 typedef int keytype; //定义关键字类型为整数类型 typedef struct{ Keytype key; //关键字项 InfoType otherinfo; //其他数据项 }RedType; //记录类型 typedef struct{ RedType r[MAXSIZE+1]; //r[0]闲置或用作“监视哨”单元 int length; //顺序表长度 }SqList; //顺序表类型;10.1 插入排序 ;说明: 为了方便和简化排序的过程以及提高排序的效率,我们和顺序表的查找过程一样,也设置一个“监视哨”。 “监视哨”中存放的是当前待排序记录的关键字,其仍旧存放在0号单元中(r[0]中),用以控制每一趟排序过程的结束。 注意:直接插入排序并不是每一趟都需设置“监视哨”。;例;从上述算法可见: 并不是每一趟排序均做待排序记录的关键字和监视哨之间的移动操作。 只有当待排序记录的关键字小于前面记录的关键字时,待排序记录的关键字才和监视哨之间做移动操作,将待排序记录的关键字复制到监视哨中(一般为r[0]中)。 教材P266图10.1有误(沿用以前版本),该图也给出了一种情况:若待排序列中含有两个相同关键字的记录时的情况,该两个记录排序前后的位序不变(稳定的排序方法)。;算法描述;10.2.1 直接插入排序;10.2.1 直接插入排序;10.2.3 希尔排序;三趟排序:;希尔排序特点: 若待排序列中含有两个相同关键字的记录时的情况,该两个记录排序前后的位序改变,参见关键字49。 由此说明希尔排序是一种不稳定的排序方法。 希尔排序可提高排序速度; 增量序列取法: 增量序列各值之间无除1以外的公因子; 最后一个增量值必须为1。 ;希尔排序特点: 子序列的构成不是简单的“逐段分割”,而是将相隔某个“增量”的记录组成一个子序列。如上例中,第一趟排序时的增量为5,第二趟排序时的增量为3,由于前两趟的插入排序中记录的关键字是和同一子序列中的前一个记录的关键字进行比较,因此关键字较小的记录就不是一步一步地往前挪动,而是跳跃式地往前移,从而使得在进行最后一趟增量为1的插入排序时,序列已基本有序,只要作记录的少量比较和移动即可完成排序,因此希而排序的时间复杂度较直接插入排序低。;10.3 快速排序;10.3.1 起泡排序(P273-P273);38 49 65 76 13 27 49 97 ;10.3.1 起泡排序;算法评价(是一种稳定的排序方法): 时间复杂度:T(n)=O(n2) 最好情况(正序) 比较次数:n-1 移动次数:0 最坏情况(逆序) 比较次数: ;10.3.2 快速排序;排序过程:对r[s……t]中记录进行一趟快速排序,附设两个指针i和j,设枢轴记录rp=r[s],x=rp.key。 初始时令i=s,j=t; 首先从j所指位置向前搜索第一个关键字小于x的记录,并和rp交换; 再从i所指位置起向后搜索,找到第一个关键字大于x的记录,和rp交换; 重复上述两步,直至i==j为止 再分别对两个子序列进行快速排序,直到每个子序列只含有一个记录为止(整个快速排序的结束条件);;例;算法评价(是一种不稳定的排序方法): 时间复杂度: 最好情况(每次总是选到中间值作枢轴)T(n)=O(nlog2n) 最坏情况(若初始记录序列按关键字有序或基本有序时,快速排序将蜕化为起泡排序,或每次总是选到最小或最大元素作枢轴)T(n)=O(n2) 一般情况:T(n)=O(nlog2n) ;10.4 选择排序;10.4.1 简单选择排序;10.4.1 简单选择排序;例;10.4.1 简单选择排序;算法评价: 时间复杂度T(n)=O(n2) 记录移动次数 最好情况(正序):0 最坏情况(逆序):3(

文档评论(0)

过各自的生活 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档