本篇文章來聊一聊希爾排序。
基本思想
上篇文章我們學習了折半插入排序,該排序算法的原理是在順序插入查找插入過程中使用折半查找法從而提高插入效率,爲此,我們可以思考一下是否還有辦法能夠使插入的效率更高呢?
基於此,希爾排序誕生了,希爾排序的基本思想爲:
先將整個待排序序列分割成若干子序列,分別進行直接插入排序,待整個序列中的記錄"基本有序"時,再對全體記錄進行一次直接插入排序。
圖解排序過程
現有如下的一個序列:
我們以5爲間隔,將原序列分成若干個子序列:
此時81、35、41就組成了一個子序列,我們對該子序列進行插入排序,結果如下:
因爲81數值比較大,若按順序插入或者折半插入,需要經過多次的比較才能夠到達指定的插入位置,而通過希爾排序,只進行了兩次比較,就讓35和81非常接近最終的插入位置,這樣的效率無疑是很高的。
此時35、41、81已經有序,我們再以5爲間隔,得到一個子序列:
此時得到94、17、75組成的子序列,對其進行插入排序,結果如下: