概念:?
希爾排序(shell sort)是插入排序的一種没隘,也稱為縮小增量排序氛魁,是直接插入排序算法的一種更高效的改進(jìn)版本言沐。
希爾排序是非穩(wěn)定的?
希爾排序是是把記錄按下標(biāo)的一定增量分組望浩,對每組使用直接插入排序算法排序;隨著增量的逐漸減少恨课,每組包含的關(guān)鍵詞越來越多舆乔,當(dāng)增量減至1時(shí),整個(gè)文件是剛好被分成一組剂公,算法隨即停止希俩。
運(yùn)作原理:將數(shù)組列在一個(gè)表中并對列分別進(jìn)行插入排序,重復(fù)這過程纲辽,不過每次用更長的列(步長更長了颜武,數(shù)列更少了)來進(jìn)行贫母。最后整個(gè)表只有一列。將數(shù)組轉(zhuǎn)換至表是為了更好的理解這個(gè)算法盒刚,算法本身還是使用數(shù)組進(jìn)行排序的。
舉例: 數(shù)組原型如下
[55 ?44 ? 66 ?33 ?77 ?22 ?88 ?11 ?99 ?17 ?93 ?21 86 32 73 43 ?61 ?56]?
如果以步長為6開始進(jìn)行排序绿贞,我們可以通過將這列表放在有
55 ? ?44 ? ? 66 ? ? 33 ? ? 77 ? ? ?22 ?
88 ? ?11 ? ? 99 ? ? 17 ? ? 93 ? ? ?21
86 ? ?32 ? ? 73 ? ? 43 ? ? 61 ? ? ?56
依次進(jìn)行分組插入排序因块,步長為6,代入變量 step籍铁,每組從0號索引位置的step開始進(jìn)行比較置換位置涡上,第一層進(jìn)行插入排序
第二層在進(jìn)行插入排序,以此類推進(jìn)行排序