给我用java写一个桶排序逻辑
下面是用Java编写的桶排序逻辑:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class BucketSort {
public static void bucketSort(int[] arr) {
int n = arr.length;
if (n <= 1) {
return;
}
// 找到数组中的最大值和最小值
int minVal = arr[0];
int maxVal = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] < minVal) {
minVal = arr[i];
} else if (arr[i] > maxVal) {
maxVal = arr[i];
}
}
// 计算桶的数量
int bucketCount = (maxVal - minVal) / n + 1;
ArrayList<ArrayList<Integer>> buckets = new ArrayList<>(bucketCount);
for (int i = 0; i < bucketCount; i++) {
buckets.add(new ArrayList<>());
}
// 将元素放入桶中
for (int i = 0; i < n; i++) {
int index = (arr[i] - minVal) / n;
buckets.get(index).add(arr[i]);
}
// 对每个桶进行排序
for (int i = 0; i < bucketCount; i++) {
Collections.sort(buckets.get(i));
}
// 将桶中的元素依次取出放回原数组
int index = 0;
for (int i = 0; i < bucketCount; i++) {
int size = buckets.get(i).size();
for (int j = 0; j < size; j++) {
arr[index++] = buckets.get(i).get(j);
}
}
}
public static void main(String[] args) {
int[] arr = {29, 10, 14, 37, 13};
bucketSort(arr);
System.out.println(Arrays.toString(arr));
}
}
运行以上代码,输出为:[10, 13, 14, 29, 37]。
原文地址: https://www.cveoy.top/t/topic/i2hQ 著作权归作者所有。请勿转载和采集!