1. 程式人生 > >JS排序演算法之希爾演算法

JS排序演算法之希爾演算法

希爾演算法:
希爾演算法在原理上也是一種插入排序,在瞭解希爾演算法之前,必須瞭解插入排序;

原理:
希爾排序在插入排序的基礎上,將資料進行了分組,將原有的資料分為若干個子集,然後對每個子集進行排序,依次類推,不停地分割成子集,直到最後完全排序。

數列:[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]