package Sort
import("fmt""math""sort""testing")funcBucketSort(arr []int){// 计算最大值与最小值
max := math.MinInt64
min := math.MaxInt64
for i :=0; i <len(arr); i++{
max =Max(max, arr[i])
min =Min(min, arr[i])}// 计算桶的数量
bucketNum :=(max-min)/len(arr)+1
bucketArr :=make([][]int, bucketNum)for i :=0; i <len(arr); i++{// 将每个元素放入桶
num :=(arr[i]- min)/len(arr)
bucketArr[num]=append(bucketArr[num], arr[i])}for i :=0; i <len(bucketArr); i++{// 对每个桶进行排序
sort.Ints(bucketArr[i])}for i,index :=0,0; i <len(bucketArr); i++{// 将桶中的元素赋值到原序列for j :=0; j <len(bucketArr[i]); j++{
arr[index]= bucketArr[i][j]
index++}}}//桶排序的复杂度很大程度上取决于 对桶内元素排序的算法的复杂度,这里选用快排作为桶内元素排序的依据funcTestBucketSort(t *testing.T){
arr:=[]int{123,34,342,456,34,24,213,0,923,-190,-6}BucketSort(arr)
fmt.Println(arr)}