排序之希爾排序

2021-08-26 14:42:52 字數 818 閱讀 6481

提到希爾排序,我們得先來看看插入排序,因為希爾排序本身就是對插入排序的一種優化。

插入排序的基本思想:每一步將乙個待排序的元素,按其排序碼的大小,插入到前面已經排好序的一組元素的合適位置上去,直到元素全部插完為止。

就像我們玩鬥地主一樣,接牌的時候,其實就是一種插入排序,每接一張牌,就會把牌放在自己手牌中合適的位置。

**:

void insert_sort(int array,int64_t size)

int64_t bound = 1;

for(;bound < size;bound++)else

}array[i] = bound_value; //這一步很重要,每一次迴圈,都要更新bound_value的值

}}

下來,我們再說說希爾排序

希爾排序就是對插入排序的一種改進。因為如果元素集合在排序之前越接近有序,那麼插入排序的效率越高。最優情況下,是

o(n^2)。

所以,希爾排序,就是讓元素集合先做預排序,讓元素集合接近有序,最後進行一次直接插入排序。

說到這,希爾排序就分為兩步:

1.做預排序。

2.做插入排序。

void shell_sort(int array,int64_t size)

int64_t gap = size/2;

for(;gap >= 1;gap /= 2)else

}

array[i] = bound_value;

} //end for

} // end for

}

排序之希爾排序

希爾排序法又稱縮小增量法。基本思想 先選定乙個整數,把待排序檔案中所有元素分成個n組。所有元素為n的記錄分在同一組內,並對每一組內的記錄進行排序。取重複上述分組和排序的工作。當到達 1時,所有元素在統一組內排好序。實現 void insertsortwithgap int a,int size,in...

排序之希爾排序

希爾排序對要排序的數字進行分組,在組內進行排序。排序完成需要進行多次分組,每次分組的個數是前一次分組個數的一半。以 3 2 9 0 6 1 5 4 8 7 該陣列為例從小到大進行排序。1.首先將該組數字進行分組,首次分組的個數為陣列長度除以2,即 10 2 5 組,下面相同顏色的為一組 即同一組內數...

排序演算法之希爾排序

希爾排序實際上是一種分治思想的插入排序。插入排序不說了,不清楚看這裡 分治思想,對增量為dk,dk遞減,開始很多小序列,最後為乙個大序列 相對直接插入排序,在希爾排序中,只不過增量不是1,而是dk 較好的增量序列是2 k 1,2 k 1 1,7,3,1,這樣可使shell排序時間複雜度達到o n 1...