八大排序算法(4)——希爾排序(縮小增量排序)

一、原理
在插入排序基礎上,在一個list中,每次遞減劃分步長,選擇組的隊員進行比較,索引位置不變,value值交換大小,數據朝着局部有序的方向發展。
剛開始時候雖然分組比較多,但每組數據很少,組數減小後每組數據多但基本有序,而插入排序對已經基本有序的數組排序效率較高。
在這裏插入圖片描述

二、實現代碼

public void shellSort(int[] array) {
    int j;
    for(int gap = array.length/2; gap>0; gap /= 2){
        //定義一個增長序列,即分割數組的增量,d1=N/2   dk=(d(k-1))/2   gap是步長
        for(int i = gap; i<array.length;i++){
            int tmp = array[i];
            
            for( j =i; j>=gap && tmp<array[j-gap]; j -= gap){
                //將相距爲Dk的元素進行排序
                array[j] = array[j-gap];
            }
            array[j] = tmp;
        }
    }
}

三、時間複雜度
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章