新JavaScript例文辞典

配列内のデータをソートする(双方向バブルソート/Bi Directionalバブルソート)

説明

ソート方法の1つに双方向バブルソート/Bi Directionalバブルソートがあります。バブルソートの改良版で順方向にバブルソートを行うと昇順の場合、最大値が末尾に決定されます。次に逆順にバブルソートを行うと最小値が先頭に決定されます。先頭と末尾が決定するので範囲を狭めて入れ替えが行われなくなればソート完了になります。

サンプルプログラム

var data = new Array(-30,10,5,-99,44,65,31,-78);
function sortData(data) {
var start = -1;
var end = data.length;
var flag = 0;
while (start < end) {
start++;
end--;
for (var i=start; i<end; i++) flag |= swap(i);
if (!flag) return; else flag = 0;
for (i=end; i>=start; i--) flag |= swap(i);
if (!flag) return; else flag = 0;
}
function swap(p) {
if (data[p] > data[p+1]) {
var n = data[p];
data[p] = data[p+1];
data[p+1] = n;
return 1;
}
return 0;
}
}
document.write("ソート前:"+data.toString()+"<br>");
sortData(data);
document.write("ソート後:"+data.toString()+"<br>");
サンプルを実行
[戻る]