桶排序
* 平均时间复杂度O(n+c) 最好O(n)
* 空间复杂度T(n+m) (n个数据,m个桶)
* 将数组分到有限数量的桶里。每个桶再个别排序。
* 稳定
过程
* 1.判断数组
* 2.获取最大/最小值,计算桶数量
* 3.初始化桶
* 4.分桶
* 5.对每个桶排序
* 6.传回数组
java实现:
public class BucketSort {
public void bucketSort(int[] arr)
{
if (arr.length<2||arr==null)
return;
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int i=0;i<arr.length;i++)
{
if (arr[i]>max)
max = arr[i];
if (arr[i]<min)
min = arr[i];
}
int range = max - min;
int bucketNum = arr.length;
//初始化桶
ArrayList<ArrayList<Integer>> buckets = new ArrayList<ArrayList<Integer>>();
for (int i = 0;i<bucketNum;i++)
{
buckets.add(new ArrayList<Integer>());
}
for (int i = 0;i<arr.length;i++)
{
//计算该数字应该放在几号桶中
int num = (arr[i]-min)*(bucketNum-1)/range;
buckets.get(num).add(arr[i]);
}
for (int i=0;i<buckets.size();i++)
Collections.sort(buckets.get(i));
int index = 0;
for (int i =0;i<buckets.size();i++)
for (int j = 0;j<buckets.get(i).size();j++)
{
arr[index++] = buckets.get(i).get(j);
}
}
}