希爾排序--圖解

原文鏈接:https://blog.csdn.net/qq_39207948/article/details/80006224

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

前情回顧:直接插入排序(對插入排序不熟悉的建議先閱讀此文)

一天,一塵拿着撲克自己在那玩,剛被師傅看見了

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

首先它把較大的數據集合分割成若干個小組(邏輯上分組),然後對每一個小組分別進行插入排序,此時,插入排序所作用的數據量比較小(每一個小組),插入的效率比較高

圖解算法---希爾排序

圖解算法---希爾排序

可以看出,他是按下標相隔距離爲4分的組,也就是說把下標相差4的分到一組,比如這個例子中a[0]與a[4]是一組、a[1]與a[5]是一組...,這裏的差值(距離)被稱爲增量

圖解算法---希爾排序

每個分組進行插入排序後,各個分組就變成了有序的了(整體不一定有序)

圖解算法---希爾排序

此時,整個數組變的部分有序了(有序程度可能不是很高)

圖解算法---希爾排序

然後縮小增量爲上個增量的一半:2,繼續劃分分組,此時,每個分組元素個數多了,但是,數組變的部分有序了,插入排序效率同樣比高

圖解算法---希爾排序

同理對每個分組進行排序(插入排序),使其每個分組各自有序

圖解算法---希爾排序

最後設置增量爲上一個增量的一半:1,則整個數組被分爲一組,此時,整個數組已經接近有序了,插入排序效率高

圖解算法---希爾排序

同理,對這僅有的一組數據進行排序,排序完成

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

隨後一塵寫出了插入arr[i]到所在組正確位置的代碼(insertI)

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

希爾排序的複雜度和增量序列是相關的

{1,2,4,8,...}這種序列並不是很好的增量序列,使用這個增量序列的時間複雜度(最壞情形)是O(n^2)

Hibbard提出了另一個增量序列{1,3,7,...,2^k-1},這種序列的時間複雜度(最壞情形)爲O(n^1.5)

Sedgewick提出了幾種增量序列,其最壞情形運行時間爲O(n^1.3),其中最好的一個序列是{1,5,19,41,109,...}

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

圖解算法---希爾排序

說完,一塵繼續玩起了撲克。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章