【きすうソート】
基数ソート とは?
💡 桁ごとに整列!比較しないのに並んじゃう魔法のソート
📌 このページのポイント
基数ソートって「比較しないソート」って聞いたけど、比較しないでどうやって並べるの?
いい質問!基数ソートは数値を桁ごとに分解して、1の位から順にバケット(箱)に振り分けるんだ。例えば 0〜9 の10個のバケットを用意して、1の位の値でまず振り分け、次に10の位、100の位…と繰り返す。全部の桁を処理し終わると自然にソートが完了するよ。
具体的にはどんな流れになるの?
たとえば [170, 45, 75, 90, 802, 24, 2, 66] をソートするなら、まず1の位で振り分けると 170→90→802→2→24→45→75→66 の順になる。次に10の位で振り分けて、最後に100の位で振り分けると完成だよ。
普通のソートより速いの?
データ次第だね。比較ソートの下限は O(n log n) だけど、基数ソートは O(n × k) で、k は最大桁数。桁数が小さいデータが大量にある場合は O(n) に近くなって圧倒的に速いよ。ただし桁数が多いデータだと逆に不利になることもあるんだ。
どういう場面で使うと便利なの?
LSD と MSD って聞いたことあるけど、何が違うの?
LSD(Least Significant Digit)は下の桁から処理する方式で、さっき説明したのがこれ。MSD(Most Significant Digit)は上の桁から処理して、途中で再帰的にグループを分割するよ。LSD のほうが実装がシンプルで安定ソートになるから一般的だね。
GPU とかでも使われたりするの?
まとめ:ざっくりこれだけ覚えればOK!
「基数ソート」って出てきたら「桁ごとに振り分けて並べる比較しないソート」と思えればだいたいOK!
📖 おまけ:英語の意味
「Radix Sort」 = 基数(桁の底)で並べ替え
💬 Radixはラテン語で「根」や「基」の意味。数の「基数」(10進なら10)に由来するよ