桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。
算法描述:
设置一个定量的数组当作空桶;
遍历输入数据,并且把数据一个一个放到对应的桶里去;
对每个不是空的桶进行排序;
从不是空的桶里把排好序的数据拼接起来。
public class Solution {
public ArrayList<Integer> bucketSort(int[] scores){
//先确定最大最小值,来确定范围
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for(int i = 0; i < scores.length;i++){
max = Math.max(max,scores[i]);
min = Math.min(min,scores[i]);
}
//计算出桶数
//int bucketNum = (max - min)/scores.length + 1;
//这里直接给出751个桶
int bucketNum = 751;
ArrayList<ArrayList<Integer>> list = new ArrayList<>(bucketNum);
for(int i = 0; i < bucketNum; i++){
list.add(new ArrayList<Integer>());
}
//将每个元素放入桶
for(int i = 0; i < scores.length;i++){
//本题中这里放元素也可以简化
//list.get((scores[i] - min)/bucketNum).add(scores[i]);
list.get(scores[i]).add(scores[i]);
}
//桶内排序,本题中可以省略这一步
for(int i = 0; i< list.size();i++){
Collections.sort(list.get(i));
}
return list;
}
}