メインコンテンツへ
アルゴリズムとプログラミングアルゴリズム実践

基数ソートの動作原理として最も正しいものはどれか。

ア.数値の各桁を下位桁から順に処理し、各桁の値でグループ分けして並べ替えを繰り返す正解
イ.配列をランダムに分割して再帰的に並べ替える
ウ.数値の最大桁から順番に比較して並べ替える
エ.全要素を一度ヒープ構造に変換してから取り出す

解説

基数ソートは「郵便局の仕分け作業」そのもの。まず下3桁(市区町村)で仕分け、次に中3桁(都道府県)、最後に上の番号で仕分けと、桁ごとに何度も仕分けを繰り返す。比較をせずに「箱に入れる」だけなので、データ量が多くなっても線形時間で完了する!

なぜ ア が正解か

基数ソートの手順(LSD: Least Significant Digit方式):①一の位の値でバケット(0-9)に振り分け、順番に取り出す②十の位でバケットに振り分け、順番に取り出す③以上を最大桁まで繰り返す。各ステップで安定なカウンティングソートを使うことがポイント。計算量はO(d×n)(dは桁数)で、dが定数なら実質O(n)の線形時間。

なぜ イ は間違いか

ランダム分割と再帰はクイックソートの特徴。基数ソートは分割統治を使わず、桁ごとのバケッティングで動作する。

なぜ ウ は間違いか

最大桁から処理するのはMSD(Most Significant Digit)方式だが、それでも基数ソートの本質は「桁ごとの仕分けを繰り返す」こと。「比較して並べ替える」という選択肢の表現が誤りで、基数ソートは比較を行わない。

なぜ エ は間違いか

ヒープ構造への変換はヒープソートの特徴。基数ソートはヒープを使わず、桁ごとのバケット(カウンティング配列)を使用する。

出典: AI生成問題(学習用)