データ構造とアルゴリズム
最悪の場合でも計算量が O(n log n) で、作業用の配列などの追加の記憶領域をほとんど使わずに並べ替えられるソートはどれか。
- Aマージソート
- Bヒープソート
- Cクイックソート
答えと解説を見る
正解:B. ヒープソート
ヒープソートは、配列の中に二分ヒープを作り、根の最大値を末尾と交換してヒープを縮めることを繰り返すので、最悪でも O(n log n) で、追加の領域は定数で済みます。マージソートも最悪 O(n log n) ですが、配列で行うには作業用に n に比例する領域が必要です。クイックソートは平均 O(n log n) で実際には速いものの、ピボットの選び方とデータによっては O(n²) になります。なお、ヒープソートは離れた位置の要素を比べるのでキャッシュの効率が悪く、安定でもありません。
- A. 最悪 O(n log n) ですが、配列で行うには n に比例する作業用の領域が必要です。
- B. 正しい。最悪でも O(n log n) で、配列の中だけで並べ替えられます。
- C. 平均は O(n log n) ですが、最悪の場合は O(n²) になります。