配列内のデータをソートする(クイックソート)


動作ブラウザ 【 IE:3.0  NN:3.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 - - - - - - - - - - -

ポイント function sortData(start,end) { var x = data[Math.floor((start + end) / 2)]; var i = start; var j = end; while (true) { while (data[i] < x) i++; while (x < data[j]) j--; if (i >= j) break; n = data[i]; data[i] = data[j]; data[j] = n; i++; j--; } if (start < i-1) sortData(start,i-1); if (j+1 < end) sortData(j+1,end); }
説  明 ソート方法の1つにクイックソートがあります。クイックソートはデータ中からキーとなる値を抜き出し、再帰を使って分割、ソートします。
サンプル <html> <head> <title>配列内のデータをソートする(クイックソート)</title> <script language="JavaScript"><!-- data = new Array(30,10,5,99,44,65,10,31,1,57,88,78); function sortData(start,end) { var x = data[Math.floor((start + end) / 2)]; var i = start; var j = end; while (true) { while (data[i] < x) i++; while (x < data[j]) j--; if (i >= j) break; n = data[i]; data[i] = data[j]; data[j] = n; i++; j--; } if (start < i-1) sortData(start,i-1); if (j+1 < end) sortData(j+1,end); } 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(0,data.length-1); printArray(); // --></script> </body> </html>
補足説明 参考:C言語による最新アルゴリズム辞典 奥村晴彦著。ISBN4-87408-414-1

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

写真素材 PIXTA