java基数排序怎么写
时间: 2023-10-13 12:47:18 浏览: 93
下面是一个使用Java实现的基数排序算法示例:
```java
import java.util.Arrays;
public class RadixSort {
public static void main(String[] args) {
int[] arr = {52, 46, 74, 85, 26, 55, 47, 69};
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void radixSort(int[] arr) {
if (arr == null || arr.length == 0) {
return;
}
// 找到数组中的最大值,确定最大位数
int max = arr[0];
for (int num : arr) {
if (num > max) {
max = num;
}
}
// 计算最大位数
int maxDigit = 0;
while (max > 0) {
max /= 10;
maxDigit++;
}
// 创建10个桶
int[][] buckets = new int[10][arr.length];
int[] bucketCounts = new int[10]; // 记录每个桶中元素的个数
// 进行maxDigit次分配和收集
for (int i = 0, divisor = 1; i < maxDigit; i++, divisor *= 10) {
// 分配
for (int num : arr) {
int digit = (num / divisor) % 10;
buckets[digit][bucketCounts[digit]] = num;
bucketCounts[digit]++;
}
// 收集
int index = 0;
for (int j = 0; j < 10; j++) {
if (bucketCounts[j] != 0) {
for (int k = 0; k < bucketCounts[j]; k++) {
arr[index++] = buckets[j][k];
}
bucketCounts[j] = 0; // 清空桶计数
}
}
}
}
}
```
该示例中,定义了一个名为RadixSort的类,其中包含了一个主函数main和一个静态方法radixSort。在主函数中,定义了一个整型数组arr,并初始化了一组整数。
在radixSort方法中,首先判断数组是否为空或长度为0,若是,则直接返回。接下来,通过遍历数组找到最大值,以确定最大位数。
然后,创建10个桶和一个桶计数数组。通过maxDigit次的分配和收集操作,将数组中的元素按照各位数字的大小进行分配到对应的桶中,并收集回原数组。每一次分配和收集都是根据当前位数的值进行操作。
最后,在主函数中调用radixSort方法对数组进行排序,并输出排序后的结果。
基数排序是一种稳定的排序算法,它根据数字的每一位进行排序,从低位到高位依次进行。通过多次的分配和收集操作,最终完成整个数组的排序。
阅读全文