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

ユーチューブ動画

アルゴリズム-バブルソートについて解説します。

ソースコード

public class ArgoSortBubble {
	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 = data.length - 1; i > 0; i--){
			for(int j = 0; j < i; j++){
				if(data[j] > data[j + 1]){
					int tmp = data[j + 1];
					data[j + 1] = data[j];
					data[j] = tmp;
				}
			}
		}
	}
}

解説

バブルソートについて解説します。

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

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

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

ここでは、バブルソートを紹介します。

ソートは並び替えです。

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

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

バブルソートは別名では隣接交換法とか基本交換法といいます。

隣り合う者同士を比較し、交換し、並び替えるという点がポイントです。

1回目の繰り返しでは、初期値がdata.length-1になっています。

これは範囲の右端が、要素数-1になるからです。

今回は配列の要素数が5ですから、変数iは4になります。

増減値がデクリメントになっていることにも注目してください。

変数iの値は、1ずつ減っていきます。比較する範囲を小さくしていく形になっています。

変数iが4の状態で、内側のfor文に突入します。初期値は変数j=0です。

終了条件は、j<iになっていますから、1回目の繰り返しでは、j<4となり、jは3まで繰り返すことになります。

その中の条件分岐がバブルソートのポイントです。

Data[0]>data[0+1]となり、隣り合うものを比較して、インデックスの小さい方の値が大きければ、という分岐になりますifの中では、値を入れ替えています。

値を入れ替えるときには、一時的な変数、ここではtmpという変数を宣言しておき、入れ替える対象を一度待避させてから、変数の値を上書きしています。

1回目の繰り返しでは、30と60を比較して、入れ替えせず、次に60と70を比較して、入れ替えせず、70と90を比較して、入れ替えせず、90と20を比較して、入れ替えることになり、30 60 70 20 90という結果になり、変数jの繰り返しが終わります。

ここでは大事なことは90は決定ということです。

2回目の繰り返しでは、iの値が1減り、3になります。

変数jの範囲は、j<3となります。Jは2まで繰り返すことになります。

すると、30 60 70 20 までが交換する範囲という形になります。

そうすると、30と60、60と70、70と20を比較したときに交換が発生します。

そうすると、30 60 20 70 90という結果になります。

これを続けるとご覧のような結果になります。

このように、隣り合うものを比較し、比較する範囲を狭くしていくアルゴリズムがバブルソートです。     

いかがでしょうか?

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

以上、バブルソートについて解説しました。

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