希爾排序是一種基於插入排序的一種改進排序,他的思路是這樣的:首先它把較大的資料集合分割成若干個小組(邏輯上分組),然後對每乙個小組分別進行插入排序,此時,插入排序所作用的資料量比較小(每乙個小組),插入的效率比較高。理論再高,沒有實踐來的清晰,下面就舉個栗子:
下面對陣列進行希爾排序:
a.首先陣列的長度length為9,它的邏輯分組的間隔(增量gap = length/2,縮小增量繼續以gap = gap/2的方式)為9/2=4,則可以分組為:
分別對每一組進行插入排序:
b.第一次分組排序完成後陣列變為,然後進行第二次邏輯分組排序,它的邏輯分組的間隔為4/2=2,則可分組為:
(2,4,9,8,3)(5,1,6,7)
分別對每一組進行插入排序:
c.第二次分組排序完成後陣列變為,然後由於第三次邏輯間隔為2/2=1,實際上就是對整個陣列進行最後一次插入排序:
(1,2,3,4,5,6,7,8,9)
這樣就完成了排序。
---------------------------------------時間複雜度分析:------------------------------------------
····希爾排序的複雜度和增量序列是相關的,增量序列的複雜度·····很複雜,有些增量序列的複雜度證明至今還沒有被證明出來。(增量序列就是使用的增量的集合,上面使用的是)
這種序列並不是很好的增量序列,使用這個增量序列的時間複雜度(最壞情形)是o(n^2)
hibbard提出了另乙個增量序列,這種序列的時間複雜度(最壞情形)為o(n1.5)
sedgewick提出了幾種增量序列,其最壞情形執行時間為o(n^1.3),其中最好的乙個序列是
排序演算法 希爾排序
如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...
排序演算法 希爾排序
摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...
排序演算法 希爾排序
希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...