排序算法之希爾排序

2. 希爾(Shell)排序

 

希爾排序中維護着一個按照某個規律逐漸縮小的增量,算法則按照這個增量的間距比較元素,進行子序列的插入排序,直到增量變爲1,完成最後一輪比較排序。

 

希爾排序時間複雜度最壞情況下爲O(n2),其平均時間複雜度與每次選擇的增量密切相關,但要優於插入排序。

 

下面的實現中,增量Increment的選擇爲N/2(N爲原始數組的長度)。從代碼中可以看出每一輪的比較和交換,都是由較小的選擇排序組成。

 

void ShellSort(ElementType A[], int N)

{

int i, j, Increment;

ElementType Tmp;

for(Increment = N/2; Increment > 0; Increment /= 2)

{

for(i = Increment; i < N; i++)

{

Tmp = A[i];

for(j = i; j >= Increment; j -= Increment)

{

if(Tmp < A[j - Increment])

A[j] = A[j - Increment];

else

break;

}

A[j] = Tmp;

}

}

}

發佈了31 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章