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


動作ブラウザ 【 IE:3.0  NN:2.0
Internet Explorer Netscape Navigator DreamPassport iCab
3.0x 4.0x 4.5 5.0x 5.5 2.0x 3.0x 4.0x 4.x 6.0 2 3 2.x
Windows - - -
Macintosh - - -
UNIX - - - - - - - -
Dreamcast - - - - - - - - - - -

ポイント start = -1; end = data.length; flag = 0; while (start < end) { start++; end--; for (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]) { n = data[p]; data[p] = data[p+1]; data[p+1] = n; return 1; } return 0; }
説  明 ソート方法の1つにBi Directionalバブルソートがあります。バブルソートの改良版で順方向にバブルソートを行うと昇順の場合最大値が末尾に決定されます。次に逆順にバブルソートを行うと最小値が先頭に決定されます。先頭と末尾が決定するので範囲を狭めて入れ替えが行われなくなればソート完了になります。
サンプル <html> <head> <title>配列内のデータをソートする(Bi Directionalバブルソート)</title> <script language="JavaScript"><!-- data = new Array(30,10,5,99,44,65,10,31,1,57,88,78,-12,-8); function sortData() { start = -1; end = data.length; flag = 0; while (start < end) { start++; end--; for (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]) { n = data[p]; data[p] = data[p+1]; data[p+1] = n; return 1; } return 0; } function printArray() { for (i=0; i<data.length; i++) document.write(data[i],", "); document.write("<br>"); } // --></script> </head> <body> 配列内のデータをソートする(Bi Directionalバブルソート)<br><br> ソート前:<br> <script langauge="JavaScript"><!-- printArray(); // --></script> <br> ソート後:(昇順)<br> <script langauge="JavaScript"><!-- sortData(); printArray(); // --></script> </body> </html>
補足説明 なし

■サンプルスクリプトを実行する >>実行
■各ブラウザでの動作結果を見る >>View!

写真素材 PIXTA