ソートの挿入は、ほぼソートされたデータで動作する場合、つまり線形ソートの効率を達成する場合に効率的です。
ただし、挿入ソートはデータを一度に1つずつ移動できるため、挿入ソートは一般に非効率的です。
Hill Sortingは、1959年に公開されたアルゴリズムであるデザイナーのDonald Shellにちなんで名付けられました。 Algorithm Shell-Metznerという名前の古い教科書とリファレンスマニュアルは、Marlene Metzner Nortonという名前を含むが、Metzner自身によると、「このアルゴリズムのために何もしなかったので、私の名前はアルゴリズムに表示されないはずです。
Hill Sortingの基本的なアイデア:最初にNよりも小さい整数D1を最初の増分として取り、ファイルのすべてのレコードをD1のグループに分割します。距離d1の倍数を持つすべてのレコードは、同じグループに配置されます。最初に各グループで直接挿入並べ替えを実行します。次に、2番目の増分D2 <D1を取得し、dt = 1の増分(dt <dt-l <…<d2 <d1)まで上記のグループとソートを繰り返します。レコードは同じグループに配置され、直接ソートされます。
この方法は、基本的にグループ化挿入方法です。
例1:
コードコピーは次のとおりです。
/**
*ヒルの並べ替えは、減少する増分ソートアルゴリズムとも呼ばれ、より効率的で改善されたバージョンのINSERTソートです。 Hill Sortingは、安定していないソートアルゴリズムです。
*
* Hill Sortingは、挿入ソートの次の2つのプロパティに基づいて改善された方法を提案します。
*
*挿入ソートは、ほぼ並べ替えられたデータで動作する場合に効率的です。つまり、線形並べ替えの効率を達成できます。
*ただし、挿入ソートはデータを一度に1つずつ移動できるため、挿入ソートは一般に非効率的です。
*
*/
function shellsort(list){
var gap = math.floor(list.length / 2);
while(gap> 0){
for(i = gap; i <list.length; i ++){
temp = list [i];
for(j = i; j> = gap && list [j -gap]> temp; j- = gap){
list [j] = list [j -gap];
}
list [j] = temp;
}
gap = math.floor(gap / 2);
}
返品リスト。
};
// テスト
var arr = [2、1、3、12、5、66、23、87、15、32];
shellsort(arr);
例2:
コードコピーは次のとおりです。
<script type = "text/javascript">
//document.write("------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------- ------------------------ n 1.3 -------- "の電力へのn
//document.write("<br /> <br /> ")
// var array = new Array(12、25、32、16、18、27、59、69、36);
function shellsort(array){
var j、i、v、h = 1、s = 3、k、n = array.length;
var result = "";
var count = 0;
while(h <n)
h = s*h+1;
while(h> 1){
h =(h-1)/s;
for(k = 0; k <h; k ++)
for(i = k+h、j = i; i <n; i+= h、j = i){
v = array [i];
while(true)
if((j- = h)> = 0 && array [j]> v)
配列[j+h] = array [j];
それ以外
壊す;
配列[j+h] = v;
}
count ++;
結果 + = "<br />スレッド" + count + "パスを介して注文した結果は次のとおりです。
for(var n = 0; n <array.length; n ++){
result + = array [n] + "、";
}
}
返品結果;
}
// shallsort(array);
//document.write("<br /> <br /> ");
</script>