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

クイックソートの計算量が O(n²) になる典型的な場合はどれか。

  1. Aデータがばらばらに並んでいて、ピボット(基準値)を無作為に選ぶ場合
  2. Bデータの個数が2のべき乗の場合
  3. Cすでに整列済みのデータで、常に先頭の要素をピボットにする場合
答えと解説を見る

正解:C. すでに整列済みのデータで、常に先頭の要素をピボットにする場合

クイックソートは、ピボットより小さい要素と大きい要素に分け、それぞれをさらに分けていきます。整列済みのデータで常に先頭をピボットにすると、毎回ピボットが最小値になり、分割が「0個と残り全部」に偏るため、比較は n(n−1)/2 回(n = 100 なら4,950回)になります。ピボットを無作為に選んだり、3つの値の中央値にしたりすると、偏った分割が続く可能性は非常に小さくなります。データの個数は計算量に関係しません。

  • A. 無作為に選べば分割が偏り続ける可能性は非常に小さく、平均 O(n log n) になります。
  • B. 個数が2のべき乗かどうかは、分割の偏りとは関係ありません。
  • C. 正しい。毎回ピボットが最小値になり、分割が極端に偏ります。
この分野を解く 分野ページへ

関連する計算ツール

データ構造とアルゴリズムの参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

データ構造とアルゴリズムのほかの問題

  1. マージソートで、昇順に整列済みの2つの列 1, 4, 7, 9 と 2, 3, 8, 10 を、先頭どうしを比べて小さい方を出力することを繰り返して1つの列にまとめる(マージする)。片方の列が空になったら、残りは比べずにそのまま出力する。比較の回数は何回か。
  2. 二分ヒープを、根を a[0] とする配列 a[0], a[1], a[2], … に、上の段から順に左から詰めて格納する。a[4] の子と親はどれか。
  3. 親の値が子の値以上になる最大ヒープを、根を a[0] とする配列で表している。ヒープ 50, 30, 40, 10, 20, 35 に45を追加する。末尾に置いてから、親より大きい間は親と交換する操作を行った後の配列はどれか。
  4. 二分探索木を中間順(通りがけ順。左の部分木、その節、右の部分木の順に訪れる)でたどったとき、訪れた節の値はどのように並ぶか。値はすべて異なるものとする。
  5. 空の二分探索木に、50, 30, 70, 20, 40, 60, 80 の順に値を挿入した。この木を後行順(帰りがけ順。左の部分木、右の部分木、その節の順に訪れる)でたどったときの順はどれか。