推出一個新系列,《看圖輕鬆理解數據結構和算法》,主要使用圖片來描述常見的數據結構和算法,輕鬆閱讀並理解掌握。本系列包括各類堆、各類隊列、各類列表、各類樹、各類圖、各類排序等等幾十篇的樣子。mysql
希爾排序是希爾(Donald Shell)提出的一種排序方法,也屬於插入排序,可是簡單插入排序的高效版本,也稱爲縮小增量排序。基本思想是將待排序元素進行增量分組,而後在分組組內進行插入排序,隨着增量的減小,每一個分組組內的元素愈來愈多,直至增量減至1時,全部元素都分到同一個組內,執行插入排序後完成整個排序操做。算法
希爾排序過程當中通常能夠初次取全部元素數量的一半爲增量,之後每次減半,直到增量爲1。sql
假設咱們有以下7個元素,分別爲84, 25, 59, 71, 62, 16, 34
,如今進行希爾排序。網絡
第一輪選取全部元素數量的一半做爲增量,即7/2,取3,因此第一輪增量爲3,那麼第一組分組就是索引爲0,3,6對應的元素,即84,71,34,對其進行插入排序操做,數據結構
把84當作已排序序列,接着準備將組內第二個元素71插入到已排序序列中,併發
71小於84,因此84後移到71原來的位置,機器學習
接着將組內第三個元素34插入到已排序序列中,首先與84比較,數據結構和算法
34小於84,因此84後移,而後繼續與71比較,學習
34小於71,因此71後移,34放進去。而後開始處理第二組分組,第二組分組就是索引爲1,4對應的元素,即25,62,對其進行插入排序操做,.net
把25當作已排序序列,接着將組內第二個元素62插入到已排序序列中,
25小於62,因此不移動。而後開始處理第三組分組,第三組分組就是索引爲2,5對應的元素,即59,16,對其進行插入排序操做,
把59當作已排序序列,接着將組內第二個元素16插入到已排序序列中,
16小於59,因此59後移而16前移。至此處理完增量爲3的狀況。
第二輪增量爲上一輪增量的二分之一,即3/2,取1,因此第二輪增量爲1,此時全部元素組成同一個分組,對該組進行插入排序操做,首先將34當成已排序序列,準備將25插入到已排序序列,
25小於34,因而34後移,
繼續將下一個元素插入已排序序列中,16與34比較,
16小於34,因而34右移,接着16與25比較,
16小於25,25後移,16放進對應位置,
繼續將下一個元素插入已排序序列中,71與34比較,
34小於71,不移動,71放回原來位置,
繼續將下一個元素插入已排序序列中,62與71比較,
62小於71,因而71後移,接着62與34比較,
34小於62,不移動,62放到對應位置,
繼續將下一個元素插入已排序序列中,59與71比較,
59小於71,因而71後移,而後繼續與62比較,
59小於62,因而62也後移,而後繼續與34比較,
34小於59,因而34不移動,59放到對應位置,
繼續將下一個元素插入已排序序列中,已是最後一個元素了,84與71比較,
71小於84,因此不移動,此時已完成全部元素的希爾排序操做。
-------------推薦閱讀------------
個人開源項目彙總(機器&深度學習、NLP、網絡IO、AIML、mysql協議、chatbot)
跟我交流,向我提問:
歡迎關注: