1. 程式人生 > 其它 >第 24 題:如何理解希爾排序?

第 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 時,整個序列恰好被分成一組,演算法便終止

演算法描述

參考資料
圖解排序演算法(二)之希爾排序
值得收藏的十大經典排序演算法

文章的內容/靈感都從下方內容中借鑑