2 4 希爾排序

2021-10-02 00:04:26 字數 713 閱讀 3763

概念解釋

希爾排序也是一種插入排序,他是簡單插入排序經過改進之後的乙個更高效的版本,也稱縮小增量排序。

希爾排序實質上就是對待排序序列進行分組,間隔一定距離進行區域性的插入排序,不斷縮小元素的間隔距離、減少分組,最終進行全部元素的插入排序。因為之前進行了區域性的插入排序,所以在最後對全部元素進行插入排序時,元素已經基本有序了,整體而言希爾排序也比一般的插入排序更高效。

將乙個序列分成好幾個序列,那麼到底怎麼分呢?比如有10個元素的序列,分成幾個才合適?每次縮減又是多少呢?

從專業的角度上講,這個分組的數稱為增量。顯然的是,增量是不斷遞減的(直到增量為1),一般而言,各趟排序的增量為,每次增量都/2。

比如如果乙個數列有10個元素,我們第一趟的增量是5(分為5組),第二趟的增量是2,第三趟的增量是1。

希爾排序過程示意圖

希爾排序示意圖

/*希爾排序

引數:arr輸入陣列位址,arrlens陣列長度

*/void shellsort(int* arr,int arrlen){

for(int incre=arrlen/2;incre>0;incre/=2){

for(int i=incre;i0 && tmp[1] 希爾排序

排序 希爾排序

希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...

排序 希爾排序

縮小增量排序 待排序列按關鍵字基本有序時,直接插入排序的效率很高 希爾排序思想 將整個待排記錄分割為若干子串行分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行一次直接插入排序,就可以完成整個排序工作 增量序列中的值沒有除1以外的公因子,且最後乙個增量必須等於1 子串行的構成不是逐...

排序 希爾排序

希爾排序是插入排序中的乙個分支,但是較簡單插入排序又有較大的改進,這使得它成為了歷史上第一批突破二次時間屏障的排序演算法之一哦。它是通過比較一定間隔的元素來工作的。因此希爾排序又稱為縮小增量排序。直接插入排序對於原始資料基本有序的情況下,效率較高。在此的基礎上。我們可以想辦法,使資料基本有序,然後利...