配列内のデータをソートする(コムソート)

説明

ソート方法の1つにコムソートがあります。バブルソートの改良版で隣同士を比較交換するのではなく、ある間隔(gap)ごとに比較交換を行います。間隔が1になり交換すべきデータがない場合にソートが完了します。コムソートを改良したコムソート11もあります。コムソート11の場合は、特定の間隔(gap)になった場合に間隔の調整を行い、より速くソートが完了するようにします。サンプルではコメントにしてある部分を外すとコムソート11として機能するようになっています。

サンプルプログラム

var data = new Array(30, 10, -5, 99, 44, 65, 10, 31, 1, -57, 88, 78);
function sortData(data){
var sf = 1.3;
var gap = data.length;
var flag = true;
while(flag || (gap > 1)) {
gap = Math.floor(gap/sf);
if (gap < 1) gap = 1;
//if ((gap = 9) || (gap = 10)) gap = 11; // コムソート11の場合はこのコメントを外す
flag = true;
for (var i=0; i<=data.length-gap; i++) {
var j = i + gap;
if (data[i] > data[j]) {
var n = data[i];
data[i] = data[j];
data[j] = n;
flag = false;
}
}
}
}
document.write("ソート前:"+data.toString()+"<br>");
sortData(data);
document.write("ソート後:"+data.toString()+"<br>");
サンプルを実行
[戻る]