JS排序演算法之希爾演算法
阿新 • • 發佈:2019-02-14
希爾演算法:
希爾演算法在原理上也是一種插入排序,在瞭解希爾演算法之前,必須瞭解插入排序;
原理:
希爾排序在插入排序的基礎上,將資料進行了分組,將原有的資料分為若干個子集,然後對每個子集進行排序,依次類推,不停地分割成子集,直到最後完全排序。
數列:[3,5,2,4,7,6,8,9,1]
先將整個數列以gap為基準進行分割為子集,對子集進行排序;(gap 一般為 Math.floor(arr.length/2))
gap:4
分割後的子集為:3,7 ,1 5,6 2,8 4,9 是個子集
對子集進行排序後:1,3,7 5,6 2,8 4,9
數列為:[1,5,2,4,3,6,8,9,7]
修改gap的值 再次進行排序
gap:2
……..
直到gap的值為0則停止
JS程式碼實現:
var arr=[3,5,2,4,7,6,8,9,1];
var gap=Math.floor(arr.length/2);
while(gap>0){
for(var i=gap;i<arr.length;i++){
var temp=arr[i];
var j=i-gap;
while(j>=0&&arr[j]>temp){
arr[j+gap]=arr[j];
arr[j]=temp;
j-=gap;
}
arr[j+gap]=temp;
}
gap=Math .floor(gap/2);
}
輸出結果: [1, 2, 3, 4, 5, 6, 7, 8, 9]