请提供一个使用Knuth序列的Java希尔排序的简单工作示例。我在互联网上查找了几个地方,但找不到适合我的解释。我理解希尔排序的概念——它是一种插入排序,通过缩小隙距来进行排序,直到达到1的隙距,然后就变成了插入排序。然而,Knuth序列是(k * 3 - 1)/2,并且前几个间隙的列表通常表示为[1, 4, 13, 40, 121..等等]。
我的问题是如何实现这一点?起始间隔实际上是1吗?还是在生成的值大于正在排序的列表大小之前的值?如果间隔从1开始,那么如果我正确地理解了希尔排序,目的将被击败。能否有人解释一下这个问题?我觉得我错过了理解这件事情的关键。
提前致谢。
我的问题是如何实现这一点?起始间隔实际上是1吗?还是在生成的值大于正在排序的列表大小之前的值?如果间隔从1开始,那么如果我正确地理解了希尔排序,目的将被击败。能否有人解释一下这个问题?我觉得我错过了理解这件事情的关键。
提前致谢。
// 3x+1 increment sequence: 1, 4, 13, 40, 121, 364, 1093, ... int h = 1; while (h < N/3) h = 3*h + 1;
您能否解释一下原因? - Dielan