標籤:var 情況 javascrip while 增量 bsp item 數組 增量排序
一、什麼是希爾排序
希爾排序(Shell‘s Sort)是插入排序的一種又稱“縮小增量排序”,是直接插入排序演算法的一種更高效的改進版本。 思路: 希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個檔案恰被分成一組,演算法便終止 邏輯: 在希爾排序中最重要的是分組,我們先找到一個間隔,每隔一定的間隔將這些數字排位一組, 假設有這樣一個數組 [9,1,2,5,7,4,8,6,3,5] ;我們每隔5個為一組。那麼這個數組被我們分成了以下幾組 第一組:9 4 第二組:1 8 第三組:2 6 第四組:5 3 第五組:7 5 分組完畢後我們在每隔組的組內進行排序 第一組: 4 9 第二組:1 8 第三組 2 6 第四組 3 5 第五組 5 7 排序後我們在將這個數組重新設間隔重新進行排序(下一次的間隔減半) 2個為一組 [4,1,2,3,5,9,8,6,5,7] 第一組:4 2 5 8 5 ==》組內排序 2 4 5 5 8 第二組:1 3 9 6 7 ==》組內排序 1 3 6 7 9 2 1 4 3 5 6 5 7 8 9 排序後我們在將這個數組重新設間隔重新進行排序(下一次的間隔減半) 1個為一組最後一次也就是兩兩比較 1 2 3 4 5 5 6 7 8 9 注意:間隔在希爾排序中一般是沒有特別的規定,通常情況下是數組長度的一半 二、代碼
var arr = [2,5,1,9,0]//算間隔var len = Math.floor(arr.length/2)while(len>0){ for(var i=len;i<arr.length;i++){ var temp = arr[i]; for(var j=i-len;j>=0&&temp<arr[j];j=j-len){ arr[j+len] = arr[j] } arr[j+len] = temp; } len = Math.floor(len/2)}
【JavaScript演算法】---希爾排序