比較ソート・安定性・逆転数の定義
定義
比較ソート
要素どうしの大小比較 の結果だけを使って並べ替えるアルゴリズムを比較ソートという。挿入・マージ・クイック・ヒープソートは比較ソートである。計数ソートや基数ソートは、キーが 以上 未満の整数であることを使うので比較ソートではない。
定義
安定性とその場ソート
キーが等しい要素の相対順序が、整列後も入力と同じに保たれるソートを安定なソートという。入力の配列のほかに (流儀により まで)の作業領域しか使わないものをその場(in-place)ソートという。
定義
逆転数
列 で かつ となる組 を逆転といい、その個数を逆転数 という。 で、隣どうしの交換1回で逆転数はちょうど1変わる。
代表的なソートの手順と計算量
挿入ソート(配列 )の手順は次のとおり。
- の順に、 を取り出す。
- から左へ、 である間 と右へずらす。
- 止まった位置の右 に を入れる。
マージソートは配列を半分に分けて再帰的に整列し、整列済みの2列を先頭から比べて併合する。長さ と の列の併合は 回以下の比較で済む。クイックソートは基準値(ピボット)を1つ選び、それより小さい要素と大きい要素に分割してから、それぞれを再帰的に整列する。ヒープソートは配列を最大ヒープに組み直し()、根の取り出しと修復(各 )を 回繰り返す。
計算量と性質( 要素、比較回数で数える)
- 挿入ソート
比較回数は 以上 以下。
- マージソート
最悪の比較回数は 、 なら 。
- クイックソート
最悪は整列済みの入力で先頭をピボットにしたときなどに起き、比較回数は 。
- ヒープソート
- 計数ソート
比較を使わないので下界 の対象外。
比較ソートの下界とクイックソートの平均
定理・法則
比較ソートの下界
条件
相異なる 個のキーを、比較の結果だけを使って並べ替える決定的なアルゴリズム。
主張
最悪時の比較回数は 以上で、 から である。ランダムな順列に対する平均の比較回数も 以上になる。
要点
アルゴリズムを決定木で表すと、 通りの入力順はそれぞれ別の葉に着く必要がある。高さ の二分木の葉は 個以下なので 。キーの範囲を使う計数ソートや基数ソートには当てはまらない。
定理・法則
クイックソートの平均比較回数
条件
相異なる 個のキーで、入力の 通りの順序が等確率(またはピボットを一様ランダムに選ぶ)。分割では、ピボットを残りの 個と1回ずつ比べる。
主張
で、。
要点
整列後に 番目と 番目()の要素が比較されるのは、その間の 個から最初にピボットに選ばれるのが両端のどちらかのときで、確率は 。これを全組で足すと上の式になる。
比較回数を数える計算例
計算例
マージソートの比較回数
をマージソートで整列し、比較回数を数えよ。併合では左右の先頭を比べ、等しいときは左を先に出す。
解答
長さ1の列どうしの併合が4回で、比較は各1回、計4回。、、、 ができる。
長さ2どうしの併合は2回。 と の併合は 対 、 対 、 対 の3回で 。 と も3回で 。計6回。
最後の併合は、左に が残るまで比べ続けるので 回で 。合計 回。
検算
の最悪の比較回数 と一致し、下界 以上である。等しい は入力で前にあったほうが前に残る(安定)。
計算例
挿入ソートの比較回数と逆転数
を挿入ソートで整列したときの、比較回数と要素の移動(右へずらす)回数を求めよ。
解答
逆転は の9個で、右へずらす回数は逆転数に等しく9回。比較は、ずらすたびに1回と、 で止まるときの1回である。左端まで動いて比較なしで止まるのは と を入れるときで、止まるための比較は 回。比較回数は 回。
検算
比較回数は 以上、 以下に入る。実装して数えても比較12回、移動9回になる。
計算例
でのクイックソートの平均
相異なる3要素のランダムな順列を、先頭をピボットとするクイックソートで整列する。平均比較回数を求めよ。
解答
最初の分割で比較は2回。ピボットが中央値なら(確率 )左右が1要素ずつで追加の比較はない。最小か最大なら(確率 )残り2要素の整列に1回かかる。平均は
検算
公式で 。 通りを全部数えても比較回数の合計は16で、平均 。 でも全24通りの平均 が公式と一致する。
二分探索・二分探索木・ハッシュ法の計算量
整列済み配列 から値 を探す二分探索の手順は次のとおり。
- 、 とする。
- の間、 として と を比べる。
- 等しければ を返す。 なら 、 なら として2へ戻る。
- になったら「見つからない」を返す。
定理・法則
二分探索の比較回数
条件
長さ の整列済み配列。 と の三方向の比較(小・等・大)を1回と数える。
主張
どの に対しても、比較は 回以下で終わる。計算量は 。
要点
1回の比較で、残る範囲の長さ が 以下になる。配列が整列していないと使えない。
計算例
二分探索の手順を追う
(添字0から)で を探せ。
解答
で 、 なので 。 で 、 なので 。 で 、 で見つかる。比較は3回。
検算
上限 回以下に収まる。
探索のデータ構造
- 二分探索木
は木の高さ。各節点で、左部分木のキーは節点より小さく、右部分木のキーは大きい。整列済みの順で挿入すると になる。赤黒木などの平衡木は を保つ。
- 連鎖法のハッシュ表
はバケット数。各キーが独立に一様なバケットへ写る(単純一様ハッシュ)と仮定する。成功する探索で調べる要素数の期待値は 。
- 開番地法(一様ハッシュ)
答案でよくある誤り
- 1
「どんなソートも 」と書く。下界は比較ソートについての定理で、キーが小さな整数なら計数ソートは で整列できる。
- 2
クイックソートの計算量を とだけ書く。最悪は で、 は平均(ランダムな入力またはランダムなピボット)の評価である。どちらの意味かを書く。
- 3
マージソートをその場ソートとして扱う。配列の標準的な実装は の作業領域を使う。
- 4
併合で等しいキーのとき右を先に出し、安定性を失う。等しいときは左の列から出す。
- 5
二分探索で を整数にしない、または として範囲が縮まらず止まらない。 を切り捨て、、 で必ず範囲を狭める。
- 6
二分探索木の探索を常に とする。平衡を保たない木では高さが になり得るので と書き、最悪 を区別する。
ソートと探索が出た院試の過去問
院試hubが年度別解説の大問を分類した集計から、この単元の内容を扱う出題を挙げる。問題文は各大学の公式過去問で確かめ、解き方は各年度の解説ページで読める。
ソートアルゴリズム
10大学・26問(2012〜2026年度)
新しい年度の出題
- 九州大学大学院 専門科目(情報系4分野) 2026年度 第3問アルゴリズム
- 九州工業大学大学院 専門科目(生命化学情報工学) 2026年度 第3問情報科学II
- 東京大学 創造情報学 専門科目 2026年度 第3問情報システム用語の説明
- 東京科学大学 専門科目(数理・計算科学) 2026年度 第3問ソートの実行追跡
- 九州工業大学大学院 専門科目(知能情報工学) 2025年度 第2問プログラミング系科目群
- 京都工芸繊維大学大学院 専門科目(情報工学) 2025年度 第3問プログラミング(2)
解答まで無料で読める演習問題
- 京都大学 社会情報学コース 2024年度 第2問情報学基礎:マージソート
- 東京大学 専門科目 2023年度 第4問論理回路・アルゴリズム
- 東京大学 学際情報学専攻 先端表現情報学コース 専門科目 2012年度 第2問ソートの計算量
ハッシュ法
5大学・9問(2013〜2027年度)
新しい年度の出題
- 東京大学 創造情報学 専門科目 2025年度 第3問情報システム用語の説明
- 大阪大学 専門科目(情報数理学) 2024年度 第1問情報基礎
- 京都大学 知能情報学コース 2021年度 第3問F2-1 アルゴリズムとハッシュ
- 京都大学 社会情報学コース 2021年度 第6問T-1:データベースのファイル編成と正規化
- 東京大学 知能機械情報学 2020年度 第1問必答問題:力学・論理回路・基礎用語
- 東京大学 学際情報学専攻 先端表現情報学コース 専門科目 2013年度 第2問集合データ構造
解答まで無料で読める演習問題
- 東京大学 創造情報学 専門科目 2025年度 第3問情報システム用語の説明
- 大阪大学 専門科目(情報数理学) 2024年度 第1問情報基礎
- 東京大学 創造情報学 専門科目 2023年度 第3問情報システム用語の説明
- 東京大学 学際情報学専攻 先端表現情報学コース 専門科目 2013年度 第2問集合データ構造
木構造・二分探索木
9大学・15問(2020〜2027年度)
新しい年度の出題
- 名古屋大学大学院 複雑系科学 2026年度 第17問情3:整列・二分探索木と最短経路法
- 名古屋工業大学 情報工学系 2026年度 第1問計算機ソフトウェア
- 豊橋技術科学大学大学院 情報・知能工学専攻基礎科目 2026年度 第3問二分探索木とC言語
- 静岡大学大学院 情報科学 2025年度 第2問計算量・再帰・学習
- 京都大学 知能情報学コース 2024年度 第4問F2-2 二分探索木と動的計画法
- 大阪大学 専門科目(情報工学) 2024年度 第1問アルゴリズムとプログラミング(挿入ソート)
解答まで無料で読める演習問題
- 静岡大学大学院 情報科学 2025年度 第2問計算量・再帰・学習
- 大阪大学 専門科目(情報工学) 2024年度 第1問アルゴリズムとプログラミング(挿入ソート)
- 大阪大学 専門科目(情報数理学) 2023年度 第1問情報基礎
アルゴリズムとデータ構造の前後の単元
このページの本文を数式のLaTeXのまま読むには Markdown版。最終更新 2026-11-16。誤りに気づいたら 運営者 へ連絡してほしい。