配列内のデータをソートする(コムソート)


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

ポイント sf = 1.3; gap = data.length; flag = true; while(flag || (gap > 1)) { gap = Math.floor(gap/sf); if (gap < 1) gap = 1; //if ((gap = 9) || (gap = 10)) gap = 11; flag = true; for (i=0; i<=data.length-gap; i++) { j = i + gap; if (data[i] > data[j]) { n = data[i]; data[i] = data[j]; data[j] = n; flag = false; } } }
説  明 ソート方法の1つにコムソートがあります。バブルソートの改良版で隣同士を比較交換するのではなく、ある間隔(gap)ごとに比較交換を行います。間隔が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() { sf = 1.3; gap = data.length; flag = true; while(flag || (gap > 1)) { gap = Math.floor(gap/sf); if (gap < 1) gap = 1; //if ((gap = 9) || (gap = 10)) gap = 11; // コムソート11の場合 flag = true; for (i=0; i<=data.length-gap; i++) { j = i + gap; if (data[i] > data[j]) { n = data[i]; data[i] = data[j]; data[j] = n; flag = false; } } } } 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>
補足説明 大量のデータをソートする場合はコムソートをさらに改良したコムソート11を使います。スクリプト中のコメントを外すとコムソート11になります。

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

写真素材 PIXTA