经典希尔排序PPT.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文档。上传文档
查看更多
希尔排序 网工1班 刘孝朋 希尔排序是对直接插入排序算法的改进, 其主要思想是:先将整个排序数列分割成为若干个子序列,在子序列分别进行直接插入排序,待整个数列基本有序时再对全部进行一次直接插入排序。以此来形成新的有序数列。一般分割方法是两个元素相距d=n/2,n/4,n/8……以此类推 直接排序 直接插入排序的基本思想:把待排序数列分成有序区和无序区,初始时有序区为待排序数列的第一个元素,其余部分作为待排序元素。然后,讲待排序元素一次一个地加入有序区,直到结束。这样来形成新的有序数列。 代码和一个实例如下。 void InsertSort(int r[], int n) ? ? for (inti=2; ilt;n; i++) ? ?? ? ?r[0]=r;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//设置哨兵 ? ??for (j=i-1; r[0]lt;r[j]; j--)? ?? ?? ?? ?//寻找插入位置 ? ?? ?? r[j+1]=r[j];? ?? ?? ?? ?? ?? ?? ?//记录后移 ? ?? ? r[j+1]=r[0];? ?? ?? ?? ?? ? 初始值? ?? ???12 15 9 20 6 31 24 第一趟排序结果 12 15 9 20 6 31 24 第二趟排序结果 9 12 15 20 6 31 24 第三趟排序结果 9 12 15 20 6 31 24 第四趟排序结果 6 9 12 15 20 31 24 第五趟排序结果 6 9 12 1 5 20 31 24 第六趟排序结果 6 9 12 15 20 24 31 在这个程序中一定要注意和明白哨兵的作用—— 1、它暂存r的值,防止在数列元素移动过程中丢失 2、防止查询越界 希尔(shell)排序 (又称缩小增量排序) 1.基本思想:把整个待排序的数据元素分成若干个小组,对同一小组内的数据元素用直接插入法排序;小组的个数逐次缩小,当完成了所有数据元素都在一个组内的排序后排序过程结束。 2.技巧:小组的构成不是简单地“逐段分割”,而是将相隔某个增量dk的记录组成一个小组,让增量dk逐趟缩短(例如依次取5,3,1),直到dk=1为止。 3.优点:让关键字值小的元素能很快前移,且序列若基本有序时,再用直接插入排序处理,时间效率会高很多。 例1:关键字序列 T=(49,38,65,97, 76, 13, 27, 49*,55, 04),请写出希尔排序的具体实现过程。 原始序列:256,301,751,129,937,863,742,694,076,438 4.算法如下 void ShellSort(int r[], int n)? ? ? for (d=n/2; dgt;=1;d=d/2)? //以增量为d进行直接插入排序 ?? ? ?? ?? ? for (i=d+1; ilt;n;i++)?? ?? ?? ?? ????? ? ?? ?? ?? ?r[0]=r;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//暂存被插入记录 ? ?? ?? ?? ???for (j=i-d; jgt;0 r[0]lt;r[j]; j=j-d) ? ?? ?? ?? ?? ?? ???r[j+d]=r[j];? ?? ?? ?? ?? ?? ??//记录后移d个位置 ? ?? ?? ?? ?? ?r[j+d]=r[0];? ?? ? ? ?? 5、希尔排序算法分析 (1)时间效率: 研究证明,若增量的选取比较合理,希尔排序的时间复杂度为O(n(log2n)2) (2)空间效率:O(1) (3)算法的稳定性:不稳定 再见! * * 38 13 6 27 7 49* 8 55 9 04 10 0 76 97 65 38 49 5 4 3 2 1 初态: 第1趟 (dk=5) 第2趟 (dk=3) 第3趟 (dk=1) 49 13 13 49 38 27 65 49* 97 55 76 04 27 38 65 49* 97 55 13 55 76 04 55 13 27 04 27 04 49 49* 49 49* 76 38 76 65 65 97 97 55 13 27 04 49 49* 38 76 65 97 13 27 04 49* 76 97 算法分析:开始时dk的值较大,子序列中的对象较少,排序速度较快;随着排序进展,dk 值逐渐变小,子序列中对象个数逐渐变多,由于前面工作的基础,大多数对象已基本有序,所以排序速度仍然很快。可以看出,49*排序后出现在49的前面,故希尔算法是不稳定的。 r[i] 256,301,751,129,937,86

文档评论(0)

此项为空 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档