26.1.6.25 要素値の交換

プログラム"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();
	    }
	}
    }
}

fileSort2.java

実行結果の例です.

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回にもなります.