希爾排序
基本思想:
將待排序的序列分為若干組,在每組內進行直接插入排序,以使整個序列基本有序,然後再對整個序列進行直接插入排序。
該方法實質上是一種分組插入方法。
具體來說,先取乙個小於n的整數d1作為增量,把檔案的全部記錄分組。所有距離為d1的倍數的記錄放在同乙個組中。現在各組內進行直接插入排序;然後,取第二個增量d2
一般的初次取序列的一半為增量,以後每次減半,直到增量為1.
這裡首先希爾排序的思想是建立在插入排序的基礎上的,所以補充講一下直接插入排序。基本思想:將整個待排序的子表看成是左右兩個部分,其中左邊為有序區,右邊是無序區,整個排序過程就是將右邊無序區中的元素逐個插入到左邊的有序區中,以構成新的有序區。
因為插入排序遇到相等的元素就停止了,所以插入排序是穩定的排序演算法。
希爾排序的時間複雜度:o(n*lgn) (lg是log以2為底)
穩定性分析:不穩定的排序演算法
希爾排序的圖形化表示:
經典排序演算法之希爾排序
前面的直接插入演算法,以抓牌為例,假設手氣比較好,抓牌的順序是從a直到k,那麼在這整個過程中都無需進行任何的插入動作,只需要將每次抓到的牌放在最後即可。假設現在手上已經抓到的牌的順序中逆序比較少,則抓牌的過程中插入操作就越少。因此,對於基本有序的序列排序,直接插入排序的效能是比較好的。這裡的基本有序...
經典排序之希爾排序詳解
希爾排序是希爾 donald shell 於1959年提出的一種排序演算法。希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的乙個更高效的版本,也稱為縮小增量排序。首先我們知道直接插入排序的時間複雜度最低的時候應該是序列基本有序,效率最高,在待排序的記錄個數較少時,效率較高。基於這個基礎理論,...
經典排序 希爾排序
感謝太原理工大學的演算法演示 在希爾排序中主要是要明白在最底層是通過一次又一次的插入排序來實現的。每次都看成是h k 個獨立的陣列,進行插入排序,然後迴圈h k 1 h k 2 h 1 如下 如果gap 1 那就是最後的插入排序了,不明白插入排序可以看我的插入排序 1 public static v...