Open Source, Open Future!
  menu
107 文章
ღゝ◡╹)ノ❤️

希尔排序

思路

图示

代码

算法

    /**
     * 希尔排序
     *
     * @param data
     */
    public static void shellOrder(int[] data) {
        int step = data.length;
        while (step / 2 > 0) {
            step = step / 2;
            for (int i = step; i < data.length; i++) {
                for (int j = i - step; j >= 0; j -= step) {
                    if (data[j + step] >= data[j]) {
                        break;
                    } else {
                        exchange(data, j, j + step);
                    }
                }
            }
        }
    }

    private static void exchange(int[] data, int i, int j) {
        int temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }

测试

    public static void main(String[] args) {
        int[] data = {5, 3, 4, 1, 2};
        shellOrder(data);
        System.out.println(Arrays.toString(data));
    }

结果

[1, 2, 3, 4, 5]