数据结构 第四版 高职计算机应用技术专业 安训国 课件第八章 排序.pptVIP

数据结构 第四版 高职计算机应用技术专业 安训国 课件第八章 排序.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文档。上传文档
查看更多
第8章 排 序;第8章 排 序;8.1 排序的基本概念;8.1 排序的基本概念;排序过程中依据的不同原则,内部排序方法可大致分为插入排序、交换排序、选择排序、归并排序和基数排序等五类。;影响时间复杂性的主要因素又可以用算法执行中的比较次数和移动次数来衡量,所以在应用时还要根据具体情况来计算实际开销,以选择合适的算法。;待排序的记录序列可以有下列三种存储方式: (1)待排序的记录存放在地址连续的一组存储单元上,它类似于线性表。在这种存储方式中,记录之间的次序关系由其位置决定,因此排序时必须移动记录; (2)待排序的记录存放在静态链表中,记录之间的次序关系由指针指定,排序时不需要移动记录,仅需修改指针; (3)待排序的记录本身存储在一组地址连续的存储单元内,同时另设一个指示各个记录存储位置的地址向量,排序时仅需移动地址向量中这些记录的“地址”,排序后再按照地址向量中的值调整记录的存储位置。;如果在排序期间具有相同键值的记录的相对位置不变,即在原序列中Ri和Rj的键值Ki=Kj且Ri在Rj之前,而排序后的序列中Ri仍在Rj之前,则称此排序方法是稳定的,否则称为不稳定的。;8.2 插入排序;8.2.1 直接插入排序;这样,一共需要经过n-1趟就可以将初始序列的n个记录重新排列成按关键字值大小排列的有序序列。;注意:第二条记录和第八条记录的相对位置在排序后没有发生变化,此排序算法是稳定的。;main() { int i,j; int r[9]={0,42,36,56,78,67,11,27,36}; for(i=2;i=8;++i) /*第一个数是有序的,为初始有序序列,i从2开始*/ if(r[i]r[i-1]) /*如,需将r[i]插入到前面有序序列中*/ { /*否则r[i]不需要插入,保持原来位置*/ r[0]=r[i]; /*r[i]的值放入监视哨中*/ for(j=i-1;r[0]r[j];--j) r[j+1]=r[j]; /*记录后移*/ r[j+1]=r[0]; /*插入到正确位置*/ } for(i=1;i=8;i++) printf(%d ,r[i]); /*输出排序后的数组元素*/ };直接插入排序算法简单、容易实现,其算法的时间复杂度是O(n2)。 从空间复杂度来看,只需要一个记录大小的辅助空间用于暂存待插入的记录。 当待排序记录较少时,排序速度较快,反之,当待排序的记录数量较大时,大量的比较和移动操作将使直接插入排序算法的效率降低; 另外,若当待排序的数据元素基本有序时,排序过程中的记录移动次数会大大减少,从而效率会有所提高。 直接插入排序是一种稳定的排序方法。;8.2.2 折半插入排序;一趟折半插入排序的步骤为: (1)初始化 将待插入的记录存入r[0]中:r[0]←r[i]; 给指定查找区间上下界指针赋值:low←1,high ←i-1; (2)折半查找插入位置; (3)将插入位置后面的记录依次后移一个位置; (4)将暂存在r[0]中的待插入记录放入找到的位置上。;折半插入排序仅仅减少了关键字间的比较次数,而记录的移动次数不变。因此折半插入排序的时间复杂度仍为O(n2)。 从空间复杂度来看,折半插入排序只需要一个记录大小的辅助空间用于暂存待插入的记录,这与直接插入排序相同。 折半插入排序是一种稳定的排序方法。;8.2.3 2-路插入排序;具体做法是:建立一个和待排序序列r[n]同类型的数组d[n]作为辅助空间。首先,将r[0]的值赋给d[0],将d[0]看成是处于最后有序序列中处于中间位置的记录,然后从r[1]开始依次将记录插入到d[0]之前或之后的有序序列中。将数组d看成是一循环向量(既首尾相连的环状空间),并设置两个指针first和final分别指向有序序列的第一条和最后一条记录,将当前待插入记录r[i]与d[0]比较,若r[i]d[0],则将其插入d[0]之前的有序序列中,反之,则将其插入到d[0]之后的有序序列中。当所有的记录都插入完成后,从指针first所指向的记录开始一直读取到指针final所指向的记录,所得到的序列就是排序后的有序序列。;8.2.4 希尔排序;例如,一组待排

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档