隣り合ったデータを比較し、逆順なら交換を繰り返すことでソートする方法。
並べ替えの過程でデータが下から上へ移動する様子が、泡が浮かんでいくように見えることから
この名前がついた。
比較回数 |
n(n-1)/2 |
交換回数 |
n(n-1)/4 |
最悪計算量 |
O(N^2) |
の場合には、まず3と4を比較4の方が大きいのでそのまま。
次に4と2を比較。2の方が小さいので交換。
さらに4と1を交換。
4と6は交換せずにそのまま、5の方が小さいので交換すると
と最大の要素が確定する。
この処理を繰り返すことでソートする。
javaで書いてみた。私の直観で実装すると以下のような感じになるが、
一般的な実装方法はどうやら違うようだ。
それについては
バブルソート実装についてを参考にされたし。
public class Bubble {
public static void main(String[] args) {
int[] array = { 3, 2, 4, 6, 5, 1 };
Bubble bubble = new Bubble();
bubble.bubble(array);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
public void bubble(int[] array) {
int temp;
for (int i = 0; i < array.length; i++) {
/*最後の項目が確定したので配列の長さをi分縮めて同様の処理を行う*/
for (int j = 1; j < array.length - i; j++) {
if (array[j] < array[j - 1]) {
/*以下3行は交換*/
temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
}
}
最終更新:2011年04月08日 20:13