第十章b希尔排序.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文档。上传文档
查看更多
第十章b希尔排序,希尔排序,希尔排序算法,希尔排序时间复杂度,希尔排序法,希尔排序图解,希尔排序的时间复杂度,希尔排序java,希尔排序c,java希尔排序算法

18 第十章 内部排序 希尔排序中gap的取法 Shell最初的方案是 gap= n/2, gap=gap/2,直到gap=1. Knuth的方案是gap = gap/3+1 其它方案有:都取奇数为好;或gap互质为好等等。 希尔排序的时间复杂度 对希尔排序的复杂度的分析很困难,在特定情况下可以准确地估算关键字的比较和对象移动次数,但是考虑到与增量之间的依赖关系,并要给出完整的数学分析,目前还做不到。 Knuth的统计结论是,平均比较次数和对象平均移动次数在n1.25 与1.6n1.25之间。 希尔排序的稳定性 希尔排序是一种不稳定的排序方法。 如序列 3 2 2* 5 * * £10.1 概述 £10.2 插入排序 £10.2.1 直接插入排序 £10.2.2 其他插入排序 £10.2.3 希尔排序 £10.3 快速排序 £10.4 选择排序 £10.4.1 简单选择排序 £10.4.2 树形选择排序 £10.4.3 堆排序 £10.5 归并排序 £10.6 基数排序 £10.6.1 多关键字的排序 £10.6.2 链式基数排序 £10.7 各种内部排序方法的比较讨论 £10.2.3 希尔排序 希尔排序(Shell’s Sort)又称“缩小增量排序”(Diminishing Increment Sort), 它是一种属插入排序类的方法。 (1)主要思想 主要思想:先将整个待排记录序列分割成为若干子序列分别进行直接插入排 序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。 £10.2.3 希尔排序 (2)算法实现 void ShellInsert (SqList L, int dk) { //对顺序表L作一趟希尔排序。本算法和一趟直接插入排序相比,作了如下修改: // 1.前后记录位置的增量是dk,而不是1; // 2.r[0]只是暂存单元,不是哨兵。当j=0时,插入位置已找到。 for (i = dk+1; i = L.length; ++ i) if (LT (L.r[i].key, L.r[i-dk].key)) { //需将L.r[i]插入有序增量子表 L.r[0] = L.r[i]; //暂存在L.r[0] L.r[i] = L.r[i-1]; for (j = i-dk; j 0 LT (L.r[0].key, L.r[j].key); j―=dk) L.r[j + dk] = L.r[j]; //记录后移,查找插入位置 L.r[j + dk] = L.r[0]; //插入 } } // ShellInsert 算法10.5如下: void ShellSort (SqList L, int dlta[ ], int t) { //按增量粗鲁dlta[0..t-1]对顺序表L作希尔排序。 for (k = 0; k t; ++ k) ShellInsert (L, dalta[k]); //一趟增量为dlta[k]的插入排序 } // ShellSort ③例子 例如,以式 中关键字为例,说明希尔排序的过程。 初始关键字序列如图10.5的第1行所示。首先将该序列分成5个子序列:{R1, R6}, {R2, R7}, … , {R5, R10},分别对每个子序列进行直接插入排序。然后将第1趟希尔排 序的结果分成3个子序列:{R1, R4, R7, R10}, {R2, R5, R8}和{R3, R6, R9},并对它们进行 直接插入排序。最后对整个序列进行一趟直接插入排序。至此,希尔排序结束,整 个序列的记录已按关键字非递减有序排列。 [初始关键字]: 49 38 65 97 76 13 27 49 55 04 49 13 38 27 97 55 76 04 65 49 一趟排序结果:13 27 49 55 04 49 38 65 97 76 13 55 38 76 27 04 65 49 49 97 二趟排序结

文档评论(0)

ajgoaw + 关注
文档贡献者

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

1亿VIP精品文档

相关文档