Java中的Shell排序算法变体

Java中的Shell排序算法变体,java,sorting,shellsort,Java,Sorting,Shellsort,是否有一种方法可以计算for循环的起点以及对其进行的调整。原始循环具有以下条件 for(int-gap=a.length/2;gap>0;gap/=2) 我调整它来设置Hibbard的外壳排序的条件,得到了这个 for(int-gap=(int)Math.pow(2,a.length);gap>0;gap/=2) 它工作得稍微好一点,甚至可能是正确的,但我想从这里开始使用更高级的shell排序 如何将不大于n/3上限的(3^k-1)/2转换为for循环条件?k值是序列的元素。因此,您的for循

是否有一种方法可以计算for循环的起点以及对其进行的调整。原始循环具有以下条件

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

我调整它来设置Hibbard的外壳排序的条件,得到了这个

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

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

如何将不大于n/3上限的(3^k-1)/2转换为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);
        ...
    }
for(int k=0;(Math.pow(3,k)-1)/2
for(int gap=1;gap<((a.length+2)/3);gap=(((((gap*2)+1)*3)-1)/2))

你的问题似乎很简单。你在哪里努力转换这些值?你似乎知道
Math.pow
。你知道
Math.ceil()
正确吗?您尝试过一些不太有效的方法吗?使用天花板刚刚修复了其中一个。我的问题是,除非我知道应该从哪里开始,否则对于更高级的ONCE,我不知道for循环应该是什么。我不知道该等式中的k应该是什么。可能是我在这里遇到麻烦的原因(3^k-1)/2是一个公式,用于给出第一个间隙k=1的间隙序列,第二个间隙k=2的间隙序列,给出“获取混凝土间隙”列中的值。
for( int gap = 1; gap < ((a.length + 2)/3); gap = (((((gap *2)+1)*3)-1)/2))