Radix Sortの実装にはいくつかのステップがあります。まず、ソートする整数配列を取得します。次に、最大の桁数を見つけます。これは、整数の中で最も桁数の多い数値に基づいています。例えば、配列[170, 45, 75, 90, 802, 24, 2, 66]の場合、最大の桁数は3です。
次に、各桁に基づいてソートを行います。最も低い桁から始めて、0から9までの数値ごとにバケットを作成し、整数を該当するバケットに配置します。このプロセスを最上位の桁まで繰り返します。最終的に、配列はソートされた状態になります。
以下に、JavaでRadix Sortを実装する簡単なコード例を示します。
import java.util.Arrays;
public class RadixSort {
public static void radixSort(int[] arr) {
// 最大の桁数を見つける
int maxDigits = getMaxDigits(arr);
// 各桁に基づいてソートを行う
for (int digit = 1; digit <= maxDigits; digit++) {
countingSort(arr, digit);
}
}
private static int getMaxDigits(int[] arr) {
int max = Arrays.stream(arr).max().getAsInt();
return (int) Math.log10(max) + 1;
}
private static void countingSort(int[] arr, int digit) {
int n = arr.length;
int[] count = new int[10];
int[] output = new int[n];
// バケットごとの出現回数を数える
for (int i = 0; i < n; i++) {
int bucket = (arr[i] / digit) % 10;
count[bucket]++;
}
// count[i]にi以下の要素の総数を格納する
for (int i = 1; i < 10; i++) {
count[i] += count[i - 1];
}
// output配列を構築する
for (int i = n - 1; i >= 0; i--) {
int bucket = (arr[i] / digit) % 10;
output[count[bucket] - 1] = arr[i];
count[bucket]--;
}
// outputをarrにコピーする
System.arraycopy(output, 0, arr, 0, n);
}
public static void main(String[] args) {
int[] arr = {170, 45, 75, 90, 802, 24, 2, 66};
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
}
このコードでは、radixSort
メソッドでRadix Sortが実行されます。getMaxDigits
メソッドは最大の桁数を計算し、countingSort
メソッドは各桁に基づいてソートを行います。main
メソッドでは、ソートされた結果が出力されます。
Radix Sortは、比較ベースのソートアルゴリズムと比較して効率的ですが、整数の桁数に依存します。整数の範囲が大きい場合や、桁数が一様である場合、Radix Sortはより効率的に動作します。また、マイナスの整数をソートする必要がある場合は、追加の手順が必要になります。
以上が、JavaでRadix Sortを実装する方法と、効率的に使用するためのヒントです。このアルゴリズムを使用すると、効率的に整数配列をソートすることができます。