vlambda博客
学习文章列表

十大排序算法之桶排序

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。 

算法描述
  • 设置一个定量的数组当作空桶;

  • 遍历输入数据,并且把数据一个一个放到对应的桶里去;

  • 对每个不是空的桶进行排序;

  • 从不是空的桶里把排好序的数据拼接起来。


代码实现

这里给出一份Java的代码实现:

public class BucketSorted {
public void bucketSort(int[] a) { if (a.length == 0) { return ; }
int i, sortedIndex = 0; int minValue = Integer.MAX_VALUE; int maxValue = Integer.MIN_VALUE; for (i = 0; i < a.length; i++) { minValue = Math.min(minValue, a[i]); maxValue = Math.max(maxValue, a[i]); }
int bucketCount = (maxValue - minValue) / a.length + 1; ArrayList<ArrayList<Integer>> buckets = new ArrayList<>(bucketCount); for (i = 0; i < bucketCount; i++) { buckets.add(new ArrayList<>()); }
for (i = 0; i < a.length; i++) { buckets.get((a[i] - minValue) / a.length).add(a[i]); }
for (i = 0; i < bucketCount; i++) { ArrayList<Integer> bucket = buckets.get(i); Collections.sort(bucket); for (i = 0; i < bucket.size(); i++) { a[sortedIndex ++] = bucket.get(i); } } } }