采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
int h = n/3;
while( h < n/3 )//取区间的三分之一为增量
h = 3 * h + 1;//获得最大的三分之一增量
老师这段代码用 int h=n/3; 代替也能正确排序,为什么要加个while循环呢
h的初始值是希尔排序划分每个子区间中的元素个数。在希尔排序的过程中,这个h值将按照某个规则(或者说是某个序列)逐渐减为1;这个序列,称为增量序列。
这段while循环,是让我们的h形成一个特殊的序列:1, 4, 13, 40, 121, 364, 1093... 可以参见课程代码第13行注释:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/02-Sorting-Basic/Course%20Code%20(C%2B%2B)/Optional-03-Shell-Sort/main.cpp
这个增量序列,是生成方式简单(代码简单),同时统计意义上,让希尔排序效率较高的一个增量序列:)
关于希尔排序的增量序列的更多探讨,可以参考这个问答中我给出的文献:)
https://coding.imooc.com/learn/questiondetail/33160.html
加油!:)
谢谢老师。
登录后可查看更多问答,登录/注册
课程专为:短时间内应对面试、升职测评等艰巨任务打造
8.7k 21
5.7k 3
4.9k 5
1.3k 18