关于希尔排序的整理

     今天在牛客网刷笔试题,看到了一题关于希尔排序的,之前上数据结构课也没有讲过,现在也只能说知道那道题怎么做了。

     先上题目。对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15};则采用的是()排序:A.选择  B.快速  C.希尔  D.起泡    答案:C

     百度了一下希尔排序,有这样一个例子:


这个例子讲到了个Gap,第一组是10/2=5,第二组是5/2=2,第三组是2/2=1.第二组确实是每隔2个一组,但第一组就说不过去了。虽然是可以解释这个结果怎么来的了,但还是不能说理解了。还有这么一个解释:

对待排记录序列先作“宏观”调整,再作“微观”调整。所谓“宏观”调整,指的是“跳跃式”的插入排序。即:将记录序列分成若干子序列,每个子序列分别进行插入排序。关键是这种子序列不是由相邻的记录构成的。
假设将 n 个记录分成 d 个子序列,则这 d 个子序列分别为:{ R[1],R[1+d],R[1+2d],…,R[1+kd] } { R[2],R[2+d],R[2+2d],…,R[2+kd] } … { R[d],R[2d],R[3d],…,R[kd],R[(k+1)d] } 其中,d 称为增量,它的值在排序过程中从大到小逐渐缩小,直至最后一趟排序减为 1。

仿照这个例子,我们来看一下前面的题目。


即是进行了一次希尔排序。所以前面提到的那个Gap,第一次的间隔应该为n/2 - 1,后面的均为n/2,一直做到n/2=0,排序就结束了,这就是所谓的希尔排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章