スポンサーリンク

【応用情報技術者試験】バブルソートとクイックソートの違いをわかりやすく解説

ソートアルゴリズム:手順・計算量・安定性を整理 違い比較

バブルソートは隣接要素の比較・交換、クイックソートはピボットを基準とする分割で整列します。クイックソートが常に速いと覚えず、平均と最悪の計算量を区別しましょう。

並べ方の違い

方法操作考え方
バブル隣同士を比較し、逆順なら交換走査を繰り返して端から位置を確定
クイックピボットを基準に分割し、各部分で同じ処理分割統治

バブルソート:1回の走査を追う

[6, 3, 8, 2]を左から昇順に比較します。6と3を交換して[3, 6, 8, 2]、6と8はそのまま、8と2を交換して[3, 6, 2, 8]です。最大の8は右端に移りましたが、まだ全体の整列は終わっていません。残りの範囲で繰り返します。

クイックソート:分割だけでは未完成

同じ配列で6をピボットにすると、小さい側[3, 2]・基準6・大きい側[8]と分けて考えられます。[3, 2]も整列することで[2, 3, 6, 8]になります。ここでは概念を示しており、分割直後の配列の順番は実装によって異なります。同じ値の扱いも実装の規則に従います。

平均・最悪・最良を分ける

方法平均最悪最良の注意点
バブルO(n²)O(n²)交換なしで終了する実装なら整列済みでO(n)
クイックO(n log n)O(n²)基本的な方式では均等な分割でO(n log n)

クイックの平均は、入力やピボット選択について平均的な条件を考えた値です。毎回ほぼ1個と残りに分かれるような偏りが続くと、最悪O(n²)になります。整列済み入力が悪くなるかどうかも、ピボットの選び方などに依存します。

O表記は比較回数そのものではない

n=1,000ならn²は1,000,000、n log₂nは約9,966ですが、この値をそのまま各方式の比較回数とはできません。例えば、確定した末尾を除き毎回全比較を行うバブルの基本形では、比較回数はn(n−1)÷2で、1,000件なら499,500回です。実装・入力の条件を確認しましょう。

安定性と追加メモリも別に確認

同じキーの元の順を保つことを安定性と呼びます。同値を交換しない基本的なバブルは安定ですが、一般的なクイックは安定性を保証しません。配列を直接交換する実装でも、再帰の記憶領域には注意が必要です。詳しくはインプレースソートで整理しています。

確認問題

[6, 3, 8, 2]を左から1回走査するバブルソートの結果は?また、クイックソートは必ずO(n log n)でしょうか?

解答・解説を見る

1回の走査後は[3, 6, 2, 8]です。クイックソートの基本形は、分割の偏りが続くと最悪O(n²)になります。

5つのソートをnoteで比較して復習

無料noteにはバブル・選択・挿入・クイック・マージの5方式の説明があります。比較の次は、ほかの方式も手順と計算量をセットで復習できます。

無料note:ソートの手順・特徴・計算量を学ぶ

ほかの教材は資格・目的別のnote教材ナビから選べます。

参考資料

NIST:Bubble sort/NIST:Quicksort

コメント