不爱生姜不吃醋⭐️
如果本文有什么错误的话欢迎在评论区中指正
与其明天开始,不如现在行动!
桶排序(Bucket Sort)又称箱排序,是一种比较常用的排序算法
其算法原理是将数组分到有限数量的桶里,再对每个桶分别排好序(可以是递归使用桶排序,也可以是使用其他排序算法将每个桶分别排好序),最后一次将每个桶中排好序的数输出。
O(N)
public class RadixSort {
public static void main(String[] args) {
int[] arr = {132, 645, 852, 642, 16, 23, 888, 666, 222, 668, 88888888};
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
private static void radixSort(int[] arr) {
if (arr == null && arr.length < 2) {
return;
}
radixSort(arr, 0, arr.length - 1, maxBits(arr));
}
private static void radixSort(int[] arr, int L, int R, int digit) {
int radix = 10;
int i = 0, j = 0;
int[] bucket = new int[R - L + 1];
for (int d = 1; d <= digit; d++) {
int[] count = new int[radix];
for (i = L; i <= R; i++) {
count[getDigit(arr[i], d)]++;
}
for (i = 1; i < radix; i++) {
count[i] += count[i - 1];
}
for (i = R; i >= L; i--) {
j = getDigit(arr[i], d);
bucket[count[j] - 1] = arr[i];
count[j]--;
}
for (i = L, j = 0; i < bucket.length; i++, j++) {
arr[i] = bucket[j];
}
}
}
private static int getDigit(int i, int d) {
return (i / (int) (Math.pow(10, d - 1))) % 10;
}
private static int maxBits(int[] arr) {
int num = Integer.MIN_VALUE;
for (int i : arr) {
num = Math.max(num, i);
}
int res = 0;
while (num != 0) {
res++;
num /= 10;
}
return res;
}
}
文章中代码的编写使用的都是Java基础知识,多加练习熟能生巧。
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家!!!