(希尔排序增量序列讨论.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(希尔排序增量序列讨论

希尔排序增量序列讨论 高晓明 (温州大学 物理与电子信息工程学院 08信管本) 摘要 本文在希尔排序算法机制的基础上,通过不同增量序列对一些规模较大的待排序序列进行实验,并对不同输入数据在不同的增量序列下的希尔排序执行时间进行比较,探索增量序列对希尔排序的影响。 关键字 希尔排序;增量序列;执行时间; The Discussion of Increment Series on Shell’s Method GAO Xiaoming (College of Physics and Electronic Information Engineering, Wen Zhou University, Administration and information technology) Abstract:This essay tests on some unsorted large arrays by referring to different increment a series, which is based on the Shells Method mechanism. Furthermore, this series gives a compare of different input data’s executing time of Shells Method under different increment series, which is aimed at exploring how increment series influence Shells Method. Key words: Shells Method; increment series; executing time 一、引言 希尔排序,又称为“缩小增量排序法”,是一种基于直接插入思想的排序方法。但希尔排序的时间耗费是所取增量序列的函数,到目前为止,尚未有人求得一种最好的增量序列。所以一直以来希尔排序的分析都被认为是一个复杂的问题。本文在理论研究的基础上,通过大量数据的程序测试,探索如何选取恰当的增量序列,使得排序过程中所需的比较和移动次数相对较少,并且无论待排序列记录数有多少,程序的执行时间都能趋于最佳。 二、希尔排序的基本思想 直接插入排序法,在待排序的关键字序列基本有序且关键字个数n较小时,其算法的性能最佳。希尔排序利用直接插入排序的最佳性质,①将待排序的关键字序列分成若干个较小的子序列,对子序列进行直接插入排序,使整个待排序序列排好序。在时间耗费上,较直接插入排序的性能有较大的改进。②在进行直接插入排序时,若待排序记录序列已经有序时,直接插入排序的时间复杂度可以提高到O(n)。若待排序记录序列基本有序时,即序列中具有下列特性的记录较少时:r[i].keyMax{r[j].key},(1≤j<i),直接插入排序的效率会大大提高。 先将待排序记录序列{r[1],r[2],r[3]…,r[j],…,r[n]},以一定增量间隔h分割成若干个“较稀疏”子序列{r[1],r[h],r[2h],…},{r[2],r[h+1],r[2h+1],…},{r[3],r[h+2],r[2h+2],…},{r[h-1],r[2h-1],r[3h-1],…,r[n]},对每个子序列分别进行直接插入排序,然后逐步减小步长h,对每个不同步长h下的子序列进行相同的操作,直到步长为1时,再对整个记录进行一次直接插入排序。 ①首先选定记录间的距离,即步长为hi(i=1),在整个待排序记录序列中将所有间隔为h1的记录分成一组,进行内直接插入排序; ②然后取i=i+1,记录间的距离为hi(hi<hi-1),在整个待排序记录序列中,将所有间隔为d2的记录分为一组,进行组内直接插入排序; 重复步骤②多次,直至记录间的距离hi=1,此时整个只有一个子序列,对该序列进行直接插入排序,完成排序过程。 如图所示,给出一个希尔排序过程的实例。 这样不管记录序列多么庞大,关键字多么复杂,在先前较大的分组步长h下每个子序列的规模都不大,用直接插入排序效率都较高,尽管在随后的步长h递减分组中子序列越来越大,由于整个序列的有序性越来越明显,则排序效率依然较高,这种改进是希尔排序的执行效率大大提高。 测希尔排序平均执行时间的算法思想 对于一个随机序列进行希尔排序,测试其平均执行时间。首先调用rand()函数产生随机数,存放于一数组,再用希尔排序进行排序,用GetTickCount()分别记录排序前后时间,之差就是该排序所执行的时间。 rand()函数没有输入参数,可直接通过表达式rand()来引用生成一个随机数,但由于rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句结果都是相同的值,所以

文档评论(0)

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

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

1亿VIP精品文档

相关文档