基数ソート
📂アルゴリズム基数ソート
アルゴリズム
桁数がkに限られたn個の自然数のデータが与えられているとする。すると、データは以下のアルゴリズムに従ってソートされ、その時間複雑性はO(n)である。
i=1,⋯,k番目の桁数で比較してソートする。
説明
**基数ソート(Radix Sort)**は、桁数の制限があるため浮動小数点のあるデータには適用できないが、データ間の比較をせずに比較ソートアルゴリズムの限界を超えて線形時間でデータをソートできる巧妙な方法である。
例
19081297721413
例えば、桁数がk=3に限られたn=6個のデータは3⋅6=18回でソートが完了する。まずi=1番目の桁でソートしてから、
190021812413077009
次にi=2番目の桁でソートし、
009812413021077190
最後にi=k番目の桁でソートすると、
009021077190413812
ここで注意すべき点として、kは桁数という定数で与えられているためkn=O(n)になるが、桁数がデータの数よりも多ければ当然O(n2)になる。このような場合は、基数ソートを使用する理由が全くなく、比較ソートアルゴリズムを使用した方が良い。
証明
戦略:上記のプロセスを理解したなら、証明をわざわざ見る必要はない。
0から9までの数をソートする際は、それぞれの数に合わせて集めてから再度結合すれば良い。0なら0同士を集め、1なら1同士を集め、…、9なら9同士を集めた配列を作り、順番に結合すればその桁に対してはソートが完了する。桁数kまでこれを繰り返すので、総実行回数はkn=O(n)になる。
■
コード
以下は基数ソートをJuliaで実装したものである。