网上实在是没有找到好的希尔排序算法,手撸个通俗易懂的

直接上代码吧

public static void shellSort2(int arr[]) {
        if (arr.length == 0) return;
        int shell = arr.length / 2;
        while (shell != 0) {
            for (int i = shell; i < arr.length; i += shell) {
                for (int j = i - shell; j >= 0; j -= shell) {
                    if (arr[j + shell] < arr[j]) {
                        int temp = arr[j];
                        arr[j] = arr[j + shell];
                        arr[j + shell] = temp;
                    }
                }
            }
            shell/=2;
        }
        for (int i : arr) {
            System.out.println(i);
        }
    }

解析:根据每次除以2定义一个希尔增量,希尔增量为0的时候推出循环。根据希尔增量逐渐将数组拆分进行插入排序。

首先分成四组
1 3 9 2 6 8 7 4
1 6
3 8
7 9
2 4
然后分为两组顺序变为
1 3 7 2 6 8 9 4
1 6 7 9
2 3 4 6
然后分为一组顺序变为
1 2 3 4 6 7 8 9
!注意,每一步根据插入排序进重排。

猜你喜欢

转载自blog.csdn.net/white___white/article/details/107509460
今日推荐