第 24 題:如何理解希爾排序?
我剛開始看這個的時候,一臉懵逼。後面又多看了幾篇其他人的文章後才理解了
在瞭解這個希爾排序之前,我想先進行一個小遊戲,大家應該都有玩過。希爾排序原理和這個小遊戲差不多
小明(玩家)、安琪拉(出題者)
安琪拉:請你在 0~100 之間,猜一個數,猜的次數越少分數越高
正常玩家,可能會依次從 0 開始一個個去猜,0, 1, 2, 3 ... 這樣一直下去猜,運氣不好可能要猜 99 次才能正確(這個就是插入排序)
希爾排序是插入排序的升級版,主要目的是減少猜的次數
小明最後利用了/2 的方法進行猜數(這個就是希爾排序)
---------------------------------------------------
答題開始
小明:猜數字是 50
安琪拉:提示數字猜小了
小明:那麼範圍肯定在(50~100)之間了,這次猜是 75
安琪拉:提示數字猜小了
小明:那麼範圍肯定在(75~100)之間了,這次猜 87
安琪拉:提示數字猜小了
小明:那麼範圍肯定在(87~100)之間了,這次猜 93
安琪拉:提示數字猜大了
小明:那麼範圍肯定在(87~93)之間了,這次猜 90
安琪拉:提示數字猜大了
小明:那麼範圍肯定在(87~90)之間了,這次猜 89
安琪拉:提示數字猜大了
小明:那麼範圍肯定在(87~89)之間了,剩下 3 個數了,那麼就可以進行一個個去猜了(插入排序)87, 88, 89
安琪拉:答案是 88
---------------------------------------------------
現在開始進入正題
什麼是希爾排序?
希爾排序就是在一個序列中進行分組(簡稱:增量),然後對每個分組分別進行插入排序。隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至 1 時,整個序列恰好被分成一組,演算法便終止
演算法描述
參考資料
圖解排序演算法(二)之希爾排序
值得收藏的十大經典排序演算法
文章的內容/靈感都從下方內容中借鑑
-
【持續維護/更新 500+前端面試題/筆記】https://github.com/noxussj/Interview-Questions/issues
-
【大資料視覺化圖表外掛】https://www.npmjs.com/package/ns-echarts
-
【利用 THREE.JS 實現 3D 城市建模(珠海市)】