在Java中壳牌排序算法的变化(Shell-sort algorithm variations in

2019-07-04 23:44发布

有没有一种方法来计算循环和的起点调整它。 原始循环具有这些条件

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

我调整它来设置希巴德的壳牌排序的条件,并得到了这个

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

它的工作原理稍微好一点的,甚至可能是正确的,但我想从这里拥有较先进的外壳各种各样的工作。

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

我如何可以把(3 ^的k - 1)/ 2比N / 3的天花板不大于成用于循环条件?

Answer 1:

的“K”值是该序列的元素。 所以,你的循环可能会是这个样子:

    for (int k = 0; (Math.pow(3, k) - 1) / 2 <= Math.ceil(n / 3); k++) {
        int gap = (int) ((Math.pow(3, k) - 1) / 2);
        ...
    }


Answer 2:

for( int gap = 1; gap < ((a.length + 2)/3); gap = (((((gap *2)+1)*3)-1)/2))


文章来源: Shell-sort algorithm variations in Java