7、桶排序
题目思路:
桶排序的基本思路是:
第一步:先获取数组中的最大和最小值,来得到桶的个数;
第二步:然后遍历数组,将数组中的值插入到桶中,数组的值为桶的index;此桶的值0为这表示该位置没有值,为1则表示有一个值,为n的时候表示有多个值;
第三步:重新遍历桶,如果当前index对应的值不为0,则表示有值,放到arr数组中。
算法复杂度:
时间复杂度和空间复杂度都是非线性的。当数比较密集的时候,使用桶排序比较好。
代码实现:
public static int[] bucketSort(int[] arr){
if (arr == null || arr.length < 2){
return arr;
}
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++){
max = Math.max(arr[i], max);
}
int[] bucket = new int[max + 1]; //生成最大值个桶
for (int i = 0; i < arr.length ; i++){
bucket[arr[i]]++; //将arr放入到桶中,当前值不为零则表示此位置有值arr
}
int j = 0;
for (int i = 0; i < bucket.length;i++){
while (bucket[i] -- !=0){ //
arr[j++] = i; //将值放入到原数组中
}
}
return arr;
}