戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2009年 秋期 午前(科目A)06


問題文

クイックソートの処理方法を説明したものはどれか。

選択肢

既に整列済みのデータ列の正しい位置に、データを追加する操作を繰り返していく方法である。
データ中の最小値を求め、次にそれを除いた部分の中から最小値を求める。この操作を繰り返していく方法である。
適当な基準値を選び、それより小さな値のグループと大きな値のグループにデータを分割する。同様にして、グループの中で基準値を選び、それぞれのグループを分割する。この操作を繰り返していく方法である。(正解)
隣り合ったデータの比較と入替えを繰り返すことによって、小さな値のデータを次第に端の方に移していく方法である。

クイックソートの処理方法を説明したものはどれか。【午前2 解説】

要点まとめ

  • 結論:クイックソートは基準値(ピボット)で配列を小さいグループと大きいグループに分割し、再帰的に並べ替える分割統治法です。
  • 根拠:各分割(パーティション)で要素を左右に振り分け、その後それぞれを独立にソートするため平均時間計算量は となります。
  • 差がつくポイント:ピボットの選び方とパーティション手法で最悪計算量や実行時間が大きく変わるため、ランダム化や median-of-three、閾値で挿入ソートへ切替える工夫を覚えておくと有利です。

正解の理由

正解は です。クイックソートは「基準値(ピボット)を選び、それより小さい群と大きい群に分割し、各群で同様に分割を繰り返す」ことで配列を整列するアルゴリズムであり、記述が選択肢ウに一致します。分割(パーティション)→再帰的ソートという分割統治の典型です。

よくある誤解

  • クイックソートは常に速いと思われがちですが、最悪ケースでは になる点を誤解しやすいです。
  • 安定なソートだと勘違いされることがあるが、標準実装は不安定です。

解法ステップ

  1. 問題文のキーワードを探す:「基準値」「分割」「同様にして…繰り返す」などの語がクイックソートを示唆します。
  2. 各選択肢のアルゴリズム特徴を対応づける:挿入ソート、選択ソート、クイックソート、バブルソートを照合します。
  3. クイックソート特有の「パーティション+再帰」を含む選択肢を選ぶ。ウが該当します。
  4. 補足で計算量や安定性を確認して、誤答の原因を整理します。

選択肢別の誤答解説

  • ア: 既に整列済みの位置に順に挿入する操作の繰り返しは「挿入ソート(Insertion Sort)」の説明であり、クイックソートではありません。
  • イ: 毎回最小値を取り出していく説明は「選択ソート(Selection Sort)」で、各ステップで最小(または最大)を選ぶ手法です。
  • : 基準値で分割し再帰的に処理する説明はクイックソートそのもので、正解です。
  • エ: 隣接要素の比較と交換を繰り返して値を端に移す方法は「バブルソート(Bubble Sort)」の説明で、異なるアルゴリズムです。

補足コラム

  • 計算量:平均 、最悪 (偏ったピボット選択時)。
  • 安定性:基本実装は不安定。安定化には追加処理や別手法が必要です。
  • パーティション手法:Hoare方式(効率的で交換回数が少ない)と Lomuto方式(実装が単純だが交換多め)が有名です。
  • 実用的最適化:ランダムピボット、median-of-three、部分配列が小さい場合は挿入ソートへ切替える、尾再帰最適化などがあります。
  • 実装例(簡易、再帰的):
def quicksort(a, lo=0, hi=None):
    if hi is None:
        hi = len(a) - 1
    if lo < hi:
        p = partition(a, lo, hi)
        quicksort(a, lo, p-1)
        quicksort(a, p+1, hi)

def partition(a, lo, hi):
    pivot = a[hi]  # Lomuto
    i = lo
    for j in range(lo, hi):
        if a[j] < pivot:
            a[i], a[j] = a[j], a[i]
            i += 1
    a[i], a[hi] = a[hi], a[i]
    return i

FAQ

Q: クイックソートは常に挿入ソートやマージソートより速いですか?
A: いいえ。平均では競争力がありますが、最悪ケースや安定性が必要な場合はマージソートなどが有利です。実装とデータ特性で選びます。
Q: ピボットはどう選べばよいですか?
A: ランダム選択や median-of-three(先頭・中間・末尾の中央値)を使うと偏りを減らせ、最悪ケースを回避しやすくなります。
Q: クイックソートは安定にできますか?
A: 可能ですが追加メモリや工夫が必要です。典型実装は不安定なので、安定性が必須なら別のアルゴリズムを検討します。

関連キーワード: クイックソート、分割統治法、パーティション、ピボット、Hoare、Lomuto、平均計算量、最悪計算量、不安定ソート、挿入ソート、選択ソート、バブルソート、中央値選択、ランダム化、尾再帰最適化
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について