希爾排序(shellsort)

希爾排序(shellsort)首先在概念上是一種經過改進的插入排序方法,實際上就是分組插入排序或者說是縮小增量排序。

  先給出具體的C語言算法實現,如下:

void shellsort(int *a,int n)
{
int i, j;
int r;
int temp;
for (r = n / 2; r >= 1;r/=2) //分序列
{
for ( i = r; i < n; i++)//從中間處開始進行比較交換
{
temp = a[i];
j = i - r; //j的初始值
while (j>=0&&temp<a[j])
{
a[j + r] = a[j];//j+r=i-r+r=i(實質)
j -= r; //j=j-r=i-r(實質)
}
a[j + r] = temp;//j+r=i-r+r=i(實質)
}
}
}


從方法上來講,希爾排序其實就是先將待排序的序列分成無數個子序列,而這些子序列之間往往相隔“增量”,一開始增量較大,我們在子序列中採取直接插入的方法排序,待結束後再逐次的減少增量的個數並繼續在新的序列中執行直接插入操作,當經過數次增量遞減的過程後,增量最終爲一,插入操作結束後,排序結束。

應該注意到,每次增量減少時,意味着每個分組中的元素個數是增加的,相對應的,需要執行操作的組數減小但每組中比較的次數相應增加。

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