希爾排序

1.希爾排序
希爾排序法又稱縮小增量法。是直接排序的優化。

2.基本思想
希爾排序法的基本思想是:先選定一個整數,把待排序文件中所有記錄分成一個組,所有距離爲一樣的記錄分在同一組內,並對每一組內的記錄進行排序。然後取整數一半的值,重複上述分組和排序的工作。當值到達1時,所有記錄在同一組內排好序。

3.圖解(按從小到大排序,以6個數字爲例)
①將整個數組分組gap=arr.length/2;如圖顏色一樣的爲一組。
希爾排序
②將顏色一樣的值進行比較,小的換到前面,大的換到後面;再進行分組gap=gap/2,如圖顏色一樣的爲一組。
希爾排序
③重複上述步驟。
希爾排序
④最終排好的序列如圖。
希爾排序

4.代碼實現

public static void shellSort(int[] array) {  
        int gap = array.length;
        while (gap > 1) {
            gap = gap / 2;
            insertGap(array, gap);
        }
        insertGap(array, 1);
    }
    public static void insertGap(int[] array, int gap) {   
        for (int bound = 1; bound < array.length; bound++) {
            int tmp = array[bound];
            int cur = bound - gap;
            for (cur = bound - gap; cur >= 0; cur -= gap) {
                if (array[cur] > tmp) {
                    array[cur + gap] = array[cur];
                } else {
                    break;
                }
            }
            array[cur + gap] = tmp;
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章