了解shell排序

时间:2017-03-23 22:17:44

标签: algorithm sorting shellsort

我有几个问题,我在网上找不到有关Shell排序的Shell排序。

public static void shell(int[] a) {
    int increment = a.length / 2;
    while (increment > 0) {
        for (int i = increment; i < a.length; i++) {
            int j = i;
            int temp = a[i];
            while (j >= increment && a[j - increment] > temp) {
                a[j] = a[j - increment];
                j = j - increment;
            }
            a[j] = temp;
        }
        if (increment == 2) {
            increment = 1;
        } else {
            increment *= (5.0 / 11);
        }
    }
}

这是我在网上找到的代码,但我真的不明白最后的其他陈述。 5.0 / 11代表什么? 此外,我需要分析算法的复杂性,虽然我收到了相当令人困惑的结果:

results

似乎O(n)无论是最好还是最坏的情况。这些结果是否合法?

1 个答案:

答案 0 :(得分:0)

5.0 / 11实际上用于获得增量的一半。任何&lt; 0.5和&gt; 0.45将用于获得圆形数值的一半。