java基本排序之希爾排序

  • 希爾排序將原有大量記錄數的記錄進行分組。分割成若干個子序列,此時每個子序列待排序的記錄個數就比較少了,然後在這些子序列內分別進行直接插入排序,當整個序列都基本有序時,注意只是基本有序,再對全體記錄進行一次直接插入排序。

  • 所謂的基本有序,就是小的關鍵字基本在前面,大的基本在後面,不大不小的基本在中間。比如{2,1,3,6,4,7,5,8,9}這樣的就可以稱爲基本有序。

  • 採取跳躍分隔的策略:將相距某個“增量”的記錄組成一個子序列,這樣才能保證在子序列內分別進行直接插入排序後得到的結果是基本有序而不是局部有序。

  • 希爾排序時間複雜度爲O(n3/2),浩宇直接排序O(n2),需要注意的是。增量序列的最後一個增量值必須等於1纔行。由於是跳躍式的移動,希爾排序不是一種穩定的排序算法。
    public void ShellSort(int[] array) {
        int temp;// 臨時變量
        int i, j;
        int increment = array.length;
        do {
            increment = increment / 3 + 1;
            for (i = increment; i < array.length; i++) {
                if (array[i - increment] > array[i]) {
                    temp = array[i];
                    for (j = i - increment; j >= 0 && temp < array[j]; j -= increment) {
                        array[j + increment] = array[j];
                    }
                    array[j + increment] = temp;
                }
            }
        } while (increment > 1);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章