package order;
import java.util.*;
/**
* @author:MZH
* @QQ:2563548305
* @Date:2022/9/4 14:59
*/
public class BucketSort {
//桶排序
public static double[] bucketSort(double [] array){
//求出最大值和最小值
double max=array[0];
double min=array[0];
for (int i = 1; i < array.length; i++) {
if(array[i]>max){
max=array[i];
}
}
for (int i = 1; i < array.length; i++) {
if(array[i]<min){
min=array[i];
}
}
double d=max-min;
//初始化桶
int bucketNum = array.length;
ArrayList<LinkedList<Double>> bucketLists = new ArrayList<>(bucketNum);
for (int i = 0; i < bucketNum; i++) {
bucketLists.add(new LinkedList<Double>());
}
//遍历数组,将每个元素放入桶中
for (int i = 0; i < array.length; i++) {
int num = (int) ((array[i]-min)*(bucketNum-1)/d);
bucketLists.get(num).add(array[i]);
}
//对每个桶的内部进行排序
for (int i = 0; i < bucketLists.size(); i++) {
Collections.sort(bucketLists.get(i));
}
//输出全部元素
double[] sortedArray = new double[array.length];
int index = 0;
for (LinkedList<Double> list : bucketLists){
for (double element : list){
sortedArray[index]=element;
index++;
}
}
return sortedArray;
}
public static void main(String[] args) {
double[] doubles = new double[]{1.2, 2.5, 5.6,10.8,4};
System.out.println("排序前"+Arrays.toString(doubles));
double[] doubles1 = bucketSort(doubles);
System.out.println("排序后"+Arrays.toString(doubles1));
}
}
桶排序-------->java版
最新推荐文章于 2024-05-09 20:44:02 发布