java - Java 中的 Shell 排序算法变体

标签 java sorting shellsort

有没有办法计算 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/

相关文章:

java - 如何测试Hibernate JPA持久层?

java - Android 上的回调函数

c - C 中的 Shell 排序未给出所需结果

java - 子图匹配(JUNG)

java - 适用于 Android/Java 的 RESTful Web 服务选项

c# - 我在 C# 中有两个列表 Found Missed Element count 和 Founded Element Count

java - 在不单击列标题的情况下对 JTable 的条目进行排序

scala - 如何在 Scala 中按两个字段对列表进行排序?

c# - Shellsort,2.48^(k-1) vs Tokuda 的序列