プログラム"Sort1"では,毎回の最小値選択を実行するのに,その添字だけに着目しました.そして,要素値の交換は毎回当り1回だけ行ないました.これとは別の方法として,常に(それまでにわかっている)最小値を目的の場所に置くようにするやり方もあります.
class Sort2{ static int n=10; static int a[ ]=new int[n]; public static void main(String argv[ ]){ int i, j; Alib.prepare(a); Alib.ln(); for(i=0; i < a.length-1; i=i+1){ for(j=i+1; j < a.length; j=j+1){ if(a[j] < a[i]) Alib.swap(a, i, j); Alib.show(a, i, "*"); Alib.ln(); } } } }
実行結果の例です.
34 28 84 91 16 57 49 70 19 63 *16 34 84 91 28 57 49 70 19 63 16 *19 84 91 34 57 49 70 28 63 16 19 *28 91 84 57 49 70 34 63 16 19 28 *34 91 84 57 70 49 63 16 19 28 34 *49 91 84 70 57 63 16 19 28 34 49 *57 91 84 70 63 16 19 28 34 49 57 *63 91 84 70 16 19 28 34 49 57 63 *70 91 84 16 19 28 34 49 57 63 70 *84 91
この方法は,プログラムは短くてよいのですが,無駄な交換の数が多くなります.実際,例で示したデータ並びに対して,"Sort1"では交換回数が9回であるのに対して,"Sort2"では22回にもなります.
26.1.6.24 単純な整列法 | 26.1.6.25 要素値の交換 | 26.1.6.26 整列の効率化 | ||
2009年度版に向けて現在作業中です.
このページに関してお気づきの点がありましたら
コメント投稿システムまでお願いします.
|
Thu, 08 Apr 2004 17:51:27 JST (1940d) |