有没有办法计算 for 循环的起点及其调整。原始循环有这些条件
for(int gap = a.length/2; gap > 0; gap/= 2 )
我调整它以设置 Hibbard 的 Shell 排序的条件并得到这个
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 循环条件?
最佳答案
“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);
...
}
关于java - Java 中的 Shell 排序算法变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13828461/