クイックソートとは?平均は速いが、最悪はO(n²)

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

クイックソートとは(全体像)

クイックソートとは、基準となる値(ピボット)を1つ選び、それより小さいデータと、大きいデータの2つに分ける。さらに、それぞれのグループでも同じことをくり返して、並べ替える方法のことだ。

背の順に並ぶときをイメージしよう。基準の1人を決めて、それより背が低い人・高い人に分ける。さらに各グループでも基準を決めて分ける。これをくり返すと、すばやく順番がそろう。

ここで一番のポイント。クイックソートは、平均ではとても速い(O(n log n))。バブルソート(O(n²))より、ずっと速い。だから、多くのプログラミング言語で、標準のソートに使われている


詳しく:平均は速いが、最悪はO(n²)

ここが心臓部。速さのポイントを押さえよう。

クイックソートのポイント

項目やさしい意味
方式基準値(ピボット)で、小さい組・大きい組に分けてくり返す
平均の速さ速い(O(n log n))。バブルソートより速い
最悪の速さ遅くなることもある(O(n²))
実用性多くの言語で標準的に使われる

クイックソートは、平均では速い(O(n log n))。これが大きな強みで、実用上の標準になっている。

ただし、つねに速いとは限らない。データの偏り方によっては、最悪のとき、O(n²)まで遅くなることがある。「クイックソートは、常にO(n log n)で速い」と思い込むと誤りになる。平均は速いが、最悪はO(n²)、と押さえよう。

わかりやすく言い換えると

身近なたとえで整理しよう。

クイックソートは、「基準の1人を決めて、背が低い組・高い組に分け、さらに各組でも分けていく」イメージ。どんどん細かく分かれて、すばやく並ぶ。つまり、分けてから、それぞれを並べる考え方だ。

「平均は速い」というのは、ふつうのデータなら、バブルソートよりずっと速いこと。だから標準的に使われる。

「最悪はO(n²)」というのは、データの偏り方によっては、遅くなることもあること。要するに、つねに最速、とは限らない。


試験のツボ

🔴 一番出る:クイックソートの仕組み

①基準値(ピボット)で、小さい組・大きい組に分ける

②さらに各組でもくり返して、並べ替える

🔴 次に出る:平均は速い

①平均では速い(O(n log n))

②バブルソート(O(n²))より速く、標準的に使われる

🟡 押さえると安定:最悪はO(n²)

①データの偏り方によっては、最悪はO(n²)

②「常にO(n log n)で速い」とは限らない


よくある間違い

「クイックソートは、どんなときも必ずO(n log n)で速い」→ ✗  平均は速い(O(n log n)が、最悪のときはO(n²)まで遅くなることがある。

「クイックソートは、バブルソートより遅い」→ ✗  平均では、クイックソートのほうがバブルソート(O(n²))より速い。

「クイックソートは、隣り合うデータを比べて入れ替えるだけだ」→ ✗  隣どうしを比べるのはバブルソート。クイックソートは、基準値で分けてくり返す。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(クイックソートの仕組み)

📝 オリジナル問題 1 クイックソートの仕組み

クイックソートに関する次の記述のうち、最も適切なものはどれか。

  1. 社員の出退勤を記録して、毎月の給与を計算するためのしくみである
  2. 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
  3. 完成したシステムを宣伝して、より多く売るための広告活動である
  4. 基準値で、小さい組と大きい組に分けて並べ替えていく方法である
データパン
データパン 解答・解説

解答は 4 だぱん。

クイックソートは、基準値(ピボット)で、小さい組と大きい組に分けて並べ替える方法なんだぱん。さらに各組でもくり返すんだぱん。

選択肢1は給与計算、選択肢2は請求書の事務、選択肢3は広告で、どれも違うぱん。

選択肢判定理由
1給与計算のしくみではない
2請求書の事務の話
3広告活動ではない
4基準値で分けて並べ替えるで正しい

オリジナル問題2(平均は速い)

📝 オリジナル問題 2 クイックソートの速さ

クイックソートの速さに関する次の記述のうち、最も適切なものはどれか。

  1. 社員の給与の計算しだいで、速さが決まるとされているものだ
  2. 平均では速く、O(n log n)でバブルソートより速い
  3. 取引先への請求書の枚数しだいで、速さが決まるとされている
  4. 平均では、バブルソートよりずっと遅いものだとされている
データパン
データパン 解答・解説

解答は 2 だぱん。

クイックソートは、平均では速く(O(n log n))、バブルソートより速いんだぱん。だから多くの言語で標準的に使われるんだぱん。

選択肢1の給与、選択肢3の請求書、選択肢4の「ずっと遅い」は、いずれも違うぱん。

選択肢判定理由
1給与計算で決まるのではない
2平均は速くバブルより速いで正しい
3請求書の枚数で決まるのではない
4バブルソートより速い

オリジナル問題3(最悪はO(n²))

📝 オリジナル問題 3 クイックソートの最悪

クイックソートの最悪の場合に関する次の記述のうち、最も適切なものはどれか。

  1. データの偏り方によっては、最悪はO(n²)まで遅くなることがある
  2. どんなときも必ずO(n log n)で、最悪でも遅くならないとされる
  3. 社員の給与を計算するときだけ、最悪になるとされているものだ
  4. 取引先へ請求書を郵送するときだけ、最悪になるとされている
データパン
データパン 解答・解説

解答は 1 だぱん。

クイックソートは、データの偏り方によっては、最悪はO(n²)まで遅くなることがあるんだぱん。「常に速い」とまちがえないようにするといいぱん。

選択肢2の「必ずO(n log n)」、選択肢3の給与、選択肢4の請求書は、いずれも違うぱん。

選択肢判定理由
1最悪はO(n²)になることがあるで正しい
2最悪はO(n²)になることがある
3給与計算のときではない
4請求書の郵送のときではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る