配列内のデータをソートする(ビンソート)


動作ブラウザ 【 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 - - - - - - - - - - -

ポイント for (i=0; i<max; i++) bin[i] = -1; for (i=0; i<data.length; i++) bin[data[i]] = data[i]; count = 0; for (i=0; i<max; i++) if (bin[i] != -1) data[count++] = bin[i];
説  明 ソート方法の1つにビンソートがあります。値の範囲が決まっていて整数値であり値の出現回数が1回である場合のみ利用できます。値の範囲分だけ配列を用意し読み出した値をキーにして対応する配列に格納します。最後に格納したデータだけを連結するとソートが終了します。
サンプル <html> <head> <title>配列内のデータをソートする(ビンソート)</title> <script language="JavaScript"><!-- data = new Array(30,10,5,99,44,65,13,31,1,57,88,78); bin = new Array(); max = 100; // 最大値(0〜100までの範囲で正の整数で出現数は1回) function sortData() { for (i=0; i<max; i++) bin[i] = -1; for (i=0; i<data.length; i++) bin[data[i]] = data[i]; count = 0; for (i=0; i<max; i++) if (bin[i] != -1) data[count++] = bin[i]; } function printArray() { for (i=0; i<data.length; i++) document.write(data[i],", "); document.write("<br>"); } // --></script> </head> <body> 配列内のデータをソートする(ビンソート)<br><br> ソート前:<br> <script langauge="JavaScript"><!-- printArray(); // --></script> <br> ソート後:(昇順)<br> <script langauge="JavaScript"><!-- sortData(); printArray(); // --></script> </body> </html>
補足説明 なし

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

写真素材 PIXTA