Java中的Shell排序算法变体
是否有一种方法可以计算for循环的起点以及对其进行的调整。原始循环具有以下条件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(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)/2for(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))