【かうんとそーと】

カウントソート とは?

💡 比べずに数えるだけ、選挙の開票みたいなソート法
📌 このページのポイント
カウントソートの仕組み 1. 入力 3 1 4 1 2 3 2. カウント 値=1 値=2 値=3 値=4 2 1 2 1 ← 各値の出現回数 3. 出力 1 1 2 3 3 4 ソート完了! 比較ソート: O(n log n) vs カウントソート: O(n+k) kは値の最大値。値の範囲が狭ければ圧倒的に高速
カウントソートのイメージ
ひよこ ひよこ

カウントソートってどうやって並べ替えるの?

ペンギン先生 ペンギン先生

まず各値が何回出てくるか数えて、その回数表をもとに正しい位置に配置するんだ。選挙の開票で票数を数えて当選者を決めるのに似ているね。

ひよこ ひよこ

比較しないってすごいね!なんで速いの?

ペンギン先生 ペンギン先生

通常のソートは2つの要素を比較するから最低でもO(n log n)かかるんだけど、カウントソートは数えるだけだからO(n+k)で済むんだよ。kは値の最大値ね。

ひよこ ひよこ

じゃあいつでもカウントソートを使えばいいのかな?

ペンギン先生 ペンギン先生

値の範囲が狭い整数データなら最強だけど、値の範囲が広いとカウント用の配列が巨大になってメモリを食うんだ。小数や文字列には直接使えないのも弱点だよ。

ひよこ ひよこ

どんなところで使われてるの?

ペンギン先生 ペンギン先生

テストの点数集計、年齢順の並べ替え、画像のヒストグラム計算とか、値の範囲が限られた場面で活躍するよ。あと基数ソートの中でカウントソートが内部的に使われていて、この組み合わせがめちゃくちゃ高速なんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「カウントソート」って出てきたら「値の出現回数を数えて並べる高速ソート」と思えればだいたいOK!
📖 おまけ:英語の意味
「Counting Sort」 = 計数ソート
💬 Counting(数える)で並べ替えるから、そのままの名前だよ
← 用語集にもどる