×
データ構造とアルゴリズム

バブルソート(Bubble Sort)は、別名「交換法」とも呼ばれる、最もシンプルで直感的な整列(ソート)アルゴリズムの一つです。処理の基本は、配列の端(例えば末尾)から隣り合う要素同士を比較し、順序が逆(昇順ソートであれば、左 > 右)の場合にその2つを入れ替える(スワップする)という操作です。これを配列の先頭に向かって繰り返していくと、1周(1パス)終わった時点で、配列内の最小値(または最大値)が一番端(先頭)に「泡(バブル)が浮かび上がるように」移動して確定します。このパスを、確定していない残りの要素に対して繰り返すことで、全体を整列させます。実装は非常に容易ですが、データ数をNとしたとき、比較回数は常に N(N-1)/2 回となり、最悪および平均の時間計算量は O(N^2) となります。データ数が増えると著しく処理時間が長くなるため、実用的なプログラムで大規模なデータをソートする用途には適していません。一方で、同じ値の要素の前後関係がソート前後で変化しない「安定ソート」であるという性質を持っています。

試験でのポイント

試験では、バブルソートの時間計算量が O(N^2) であることや、具体的な配列データを与えられて「パスを1回(あるいは数回)実行した後の配列の状態はどうなっているか」をトレースさせる問題が出題されます。また、すでにデータが整列済みである場合に余計なループをスキップする「フラグ(交換が発生したかどうかを記録する変数)を用いた最適化バブルソート」のアルリズム構造についても出題されることがあります。

関連する用語

スワップ(2つの変数の値を入れ替える基本処理)、時間計算量 O(N^2)(データの2乗に比例して処理時間が増大する効率の悪いオーダー)、安定ソート(元の順序を崩さずにソートを行うアルゴリズムの分類)。