3

有没有办法计算 for 循环的起点及其调整。原始循环有这些条件

for( int gap = a.length / 2; gap > 0; gap /= 2 )

我对其进行了调整以设置 Hibbard's Shell Sort 的条件并得到了这个

for( int gap = (int) Math.pow(2, a.length); gap > 0; gap /= 2 )

它工作得稍微好一点,甚至可能是正确的,但我想从这里开始使用更高级的 shell 类型。

http://en.wikipedia.org/wiki/Shellsort#Gap_sequences

如何将 (3^k - 1)/2 不大于 n/3 的上限转换为 for 循环条件?

4

2 回答 2

3

“k”值是序列的元素。所以你的 for 循环可能看起来像:

    for (int k = 0; (Math.pow(3, k) - 1) / 2 <= Math.ceil(n / 3); k++) {
        int gap = (int) ((Math.pow(3, k) - 1) / 2);
        ...
    }
于 2012-12-11T21:22:47.580 回答
0
for( int gap = 1; gap < ((a.length + 2)/3); gap = (((((gap *2)+1)*3)-1)/2))
于 2012-12-11T21:28:20.343 回答