JSソートアルゴリズムのヒルアルゴリズム
1900 ワード
ヒルアルゴリズム:ヒルアルゴリズムは原理的にも挿入ソートであり、ヒルアルゴリズムを理解する前に、挿入ソートを理解しなければならない.
原理:ヒルソートはソートを挿入した上で、データをグループ化し、元のデータをいくつかのサブセットに分け、各サブセットをソートし、順番に類推し、最後に完全にソートするまでサブセットに分割し続けた.
数列:[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]
gapの値を変更して再度ソートgap:2........gapの値が0になるまで停止します
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]
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;ivar 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]