排序演算法(四) JAVA實現希爾排序

2021-07-30 09:12:30 字數 1204 閱讀 5181

希爾排序是時間複雜度突破o(

n2) 的最早的一批演算法之一,它是直接插入排序的公升級版。

思想:由於直接插入排序在待排序列基本有序的情況下效率是很高的,但是在實際情況中,很少能滿足基本有序。希爾排序就是要為直接插入排序創造基本有序的條件。

過程:以為例

要確認分組的條件,即確認乙個增量increment。

(1)設定第一次的增量為increment_1=length/2=10/2=5

分組為(9,4),(1,6),(5,10),(8,2),(3,12)

對這些分組進行內部直接插入排序,排序後為(4,9),(1,6),(5,10),(2,8),(3,12)

那麼排序後的序列為

(2)設定第二次的增量為increment_2=(increment_1)/2=5/2=2

分組為和

進行內部直接插入排序後為和

那麼排序後的序列為

(3)設定第三次的增量為increment_3=(increment_2)/2=2/2=1

增量為1的時候就是對整個序列進行整體的直接插入排序。

public

class shellsort ;

shellsort(arr);

}private

static

void

shellsort(int arr)

arr[j+incre] = temp;

}incre = incre/2;

} }}

複雜度分析:

希爾排序最關鍵的操作是比較而不是交換,由於希爾排序是根據增量來分組的,那麼增量的選取會影響排序的效率。目前還沒有人找到最好的一種增量序列,但要注意增量序列的選擇必須滿足序列最後乙個增量值為1。

排序演算法

最差情況複雜度

最好情況複雜度

平均時間複雜度

希爾排序o(

n2) o(

n3/2

) o(

nlog

n)~o(

n2)

java希爾排序演算法實現

希爾排序嚴格來說是基於插入排序的思想,又被稱為縮小增量排序。具體流程如下 1 將包含n個元素的陣列,分成n 2個陣列序列,第乙個資料和第n 2 1個資料為一對.2 對每對資料進行比較和交換,排好順序 3 然後分成n 4個陣列序列,再次排序 4 不斷重複以上過程,隨著序列減少並直至為1,排序完成。假如...

希爾排序演算法Java實現

希爾排序演算法是插入排序的一種改進,希爾排序將陣列的下標按照一定的增量排序,將乙個陣列分成幾個部分,對其中各個部分都只用使用插入排序的思想,當在當前增量情況下各個部分排序完成,則按照一定規則縮小增量,直至增量為一時,陣列就只有乙個部分,完成這部分的排序即可完成陣列的排序。增量選取無硬性要求,在這裡增...

排序演算法之希爾排序 java實現

希爾排序 在直接插入排序的基礎上進行的優化,直接插入排序在n值小的時候效率比較高,在n很大的時候如果待排序序列基本有序,效率依然很高,時間效率可以提公升為o n 希爾排序也稱之為縮小增量排序。1.先選取乙個小於n的整數d 步長 然後按照步長d將待排序序列分為d組,從第乙個記錄開始間隔為d的為乙個組。...