ソート / Counting Sort(計数ソート)

値そのものを比較せず、
個数を数える。

要素の取りうる値の範囲が狭いときに強いソートです。各値が何回出たかを数え、そこから整列済み列を組み立てます。

比較ソートではない整数向け範囲 k に依存

目次

このページの目次

このページでわかること

先に知っておくポイント

1. 配列を並べ替える前に数える
2. count 配列の意味
3. 累積和で位置が決まる

概要

概要

要素の取りうる値の範囲が狭いときに強いソートです。各値が何回出たかを数え、そこから整列済み列を組み立てます。

考え方

擬似コード

count each value
compute prefix sums
place each item into output

要点

要点まとめ

最良時計算量

O(n + k)

平均時計算量

O(n + k)

最悪時計算量

O(n + k)

安定ソートか

実装次第で Yes

補足

向いている場面と注意点

なぜ速いか

比較を繰り返さず、値ごとの個数から位置を求めるからです。

前提

値の範囲 k が広すぎると不利です。

つながり

Radix Sort の内部でも使われます。

動きで確認

動きを見てたしかめる

ここでは「配列を並べ替える前に数える」を見ながら、上で読んだ内容を動きと結びつけます。

注目重要候補確定

次に見る

次に見るページ

比較すると違いがわかりやすいページを先に置いています。