用java写一个基数排序算法函数,传入int[],对其进行基数排序,返回值void
时间: 2024-04-12 21:27:38 浏览: 13
以下是使用Java编写的基数排序算法函数:
```java
public static void radixSort(int[] arr) {
if (arr == null || arr.length == 0) {
return;
}
// 找出最大值
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
// 计算最大值的位数
int digits = 0;
while (max > 0) {
max /= 10;
digits++;
}
// 创建桶数组
int[][] buckets = new int[10][arr.length];
int[] count = new int[10];
// 进行digits次分配和收集
for (int i = 0, divisor = 1; i < digits; i++, divisor *= 10) {
// 分配
for (int j = 0; j < arr.length; j++) {
int digit = (arr[j] / divisor) % 10;
buckets[digit][count[digit]] = arr[j];
count[digit]++;
}
// 收集
int index = 0;
for (int j = 0; j < 10; j++) {
for (int k = 0; k < count[j]; k++) {
arr[index++] = buckets[j][k];
}
count[j] = 0; // 重置计数数组
}
}
}
```
在这个函数中,我们首先检查输入数组是否为空或长度为0,如果是,则直接返回。
然后,我们找到输入数组中的最大值,以确定需要进行多少次分配和收集。
接下来,我们计算最大值的位数,以确定每次分配和收集时要根据哪一位进行操作。
然后,我们创建10个桶数组和一个计数数组。桶数组用于存放待排序数组中的元素,计数数组用于记录每个桶中实际存放的元素个数。
接下来,我们进行digits次分配和收集的循环。在每次循环中,我们根据当前位数进行元素的分配和收集。
最后,我们将排序后的结果直接修改原数组。
通过调用`radixSort`函数,传入待排序的整型数组,即可对其进行基数排序。排序后的结果将直接修改原数组。