036-アルゴリズム-選択ソート【新人エンジニアが最初に覚えたい100のJava文法】

ユーチューブ動画

選択ソートについて解説します。

ソースコード

public class ArgoSortSelection {
	public static void main(String[] args) {
		int[] data = { 30, 60, 70, 90, 20 };
		sort(data);
		for(int element : data){
			System.out.print(element + " ");
		}
	}
	public static void sort(int[] data) {
		for(int i = 0; i < data.length - 1; i++){
			int min = i;
			for(int j = i + 1; j < data.length; j++){
				if(data[j] < data[min]){
					min = j;
				}
			}
			int temp = data[i];
			data[i] = data[min];
			data[min] = temp;
		}
	}
}

解説

選択ソートについて解説します。

プログラムを組み立てるときには、プログラムの解法が必要です。

プログラムの解法をアルゴリズムといいます。

代表的なアルゴリズムを覚えておくと、将来いろいろなプログラムを組むときのヒントになります。

ここでは、選択ソートを紹介します。

ソートは並び替えです。

サンプルコードでは、配列dataを並び替えるため、sortメソッドを呼び出し、for文で並び替えた後の要素を出力しています。

なお、for文では拡張for文が利用されているので、配列dataの要素を1つ取り出し、変数elementに入れることで繰り返し出力しています。

選択法は、指定範囲の中の最小値もしくは最大値を探索し、それと入れ替えることを繰り返しながら、並び替える方法です。

サンプルコードでは、最初の繰り返しで最小値との入れ変え、内部の繰り返しで、最小値の探索を行っています。

1回目の繰り返しでは、配列の0番目の要素を仮の最小値にしています。

変数ミニマムは、最小値のインデックスを表します。

次の繰り返しで、変数jがi+1になっていますね。

初期値が要素の1番目ということになります。1番目以降から配列の最後までを見て、仮の最小値よりも小さい値だったら、最小値のインデックスを更新する処理になっています。

仮の最小値の場所、つまり配列の0番目の値と、更新した最小値のインデックスの要素を交換する処理が後半の部分です。

すると、30と20が入れ替わり、20 60 70 90 30という結果になります。

2回目の繰り返しでは、変数iがインクリメントしますから、配列の1番目の要素を仮の最小値にしています。

次の繰り返しで、2番目以降から配列の最後までを見て、最小値のインデックスを更新します。

すると、60と30が入れ替わり、20 30 70 90 60という結果になります。

これを繰り返していくと、ご覧のような形になります。

いかがでしょうか?頭の中だけで考えずにぜひ書き出して考えてみてください。

以上、選択ソートについて解説しました。

このサンプルコードをJavaタッチタイプゲームとして遊ぶことができます。