配列内のデータをソートする(基数/ラディックスソート)


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

ポイント buff = new Array(); count= new Array(); keta = 3; for (i=0; i<10; i++) { buff[i] = new Array(); count[i]= 0; } for (i=0; i<data.length; i++) { p = data[i] % 10; buff[p][count[p]++] = data[i]; } for (k=1; k<=keta; k++) setData(k); cnt = 0; for (j=0; j<10; j++) for (i=0; i<count[j]; i++) data[cnt++] = buff[j][i]; function setData(rad) { var count2 = new Array(); var temp = new Array(); var i,j,p; for (i=0; i<10; i++) { temp[i] = new Array(); count2[i]= 0; } div = Math.pow(10,rad); for (j=0; j<10; j++) { for (i=0; i<count[j]; i++) { p = Math.floor(buff[j][i] / div) % 10; temp[p][count2[p]++] = buff[j][i]; } } buff = temp; count = count2; }
説  明 ソート方法の1つにラディックスソートがあります。値が整数値で一定の桁数の範囲内である場合に使えます(文字のソートにも使えます)。特定の桁の値に注目し抜き出した値を元に配列に格納していきます。全ての桁数分繰り返すとソートが完了します。
サンプル <html> <head> <title>配列内のデータをソートする(基数/ラディックスソート)</title> <script language="JavaScript"><!-- data = new Array(32,10,135,9999,1244,65,1,313,31,801,57,88,78,733,7,100); function sortData() { buff = new Array(); count= new Array(); keta = 3; for (i=0; i<10; i++) { buff[i] = new Array(); count[i]= 0; } for (i=0; i<data.length; i++) { p = data[i] % 10; buff[p][count[p]++] = data[i]; } for (k=1; k<=keta; k++) setData(k); cnt = 0; for (j=0; j<10; j++) for (i=0; i<count[j]; i++) data[cnt++] = buff[j][i]; } function setData(rad) { var count2 = new Array(); var temp = new Array(); var i,j,p; for (i=0; i<10; i++) { temp[i] = new Array(); count2[i]= 0; } div = Math.pow(10,rad); // 10のn乗 for (j=0; j<10; j++) { for (i=0; i<count[j]; i++) { p = Math.floor(buff[j][i] / div) % 10; temp[p][count2[p]++] = buff[j][i]; } } buff = temp; count = count2; } 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