public class BucketSort {
public double[] sort(double[] sourceArray){
double[] arr= Arrays.copyOf(sourceArray,sourceArray.length);
return bucketSort(arr,5);
}
private double[] bucketSort(double[] arr,int buckerSize){
int len=arr.length;
double[] result=new double[len];
double min=arr[0];
double max=arr[0];
for(int i=0;i<arr.length;i++){
min=min<=arr[i]?min:arr[i];
max=max>=arr[i]?max:arr[i];
}
double space=(max-min+1)/buckerSize;
ArrayList<Double>[] arrayLists=new ArrayList[buckerSize];
for(int i=0;i<len;i++){
int index=(int)Math.floor((arr[i]-min)/space);
if(arrayLists[index]==null){
arrayLists[index]=new ArrayList<Double>();
arrayLists[index].add(arr[i]);
}else{
int k=arrayLists[index].size()-1;
while(k>=0 && (Double)arrayLists[index].get(k)>arr[i]){
if(k+1>arrayLists[index].size()-1){
arrayLists[index].add(arrayLists[index].get(k));
}else {
arrayLists[index].set(k+1,arrayLists[index].get(k));
}
k--;
}
if (k + 1 > arrayLists[index].size() - 1) {
arrayLists[index].add(arr[i]);
} else {
arrayLists[index].set(k + 1, arr[i]);
}
}
}
int count = 0;
for (int i = 0; i < buckerSize; i++) {
if (null != arrayLists[i] && arrayLists[i].size() > 0) {
Iterator< Double > iter = arrayLists[i].iterator();
while (iter.hasNext()) {
Double d = (Double) iter.next();
result[count] = d;
count++;
}
}
}
return result;
}
public static void main(String[] args) {
double[] arrdoublescore={2,3,2,4,3,234,23,4};
BucketSort bucketSort=new BucketSort();
Arrays.stream(bucketSort.sort(arrdoublescore)).forEach(System.out::println);
}
}