桶排序(Bucket Sort)是一种分布式排序算法,将元素分布到有限数量的桶中,然后对每个桶中的元素进行排序。最后,将所有桶中的元素连接在一起。
根据输入数据的分布范围,创建一定数量的桶。
将输入数据根据某种映射函数分配到相应的桶中。
可以使用其他排序算法或递归使用桶排序本身对每个桶内的元素进行排序。
将所有桶中的元素连接在一起,得到排序结果。
func bucketSort(arr []int, bucketSize int) []int {
if len(arr) < 2 {
return arr
}
min, max := arr[0], arr[0]
for _, n := range arr {
if n < min {
min = n
}
if n > max {
max = n
}
}
buckets := make([][]int, (max-min)/bucketSize+1)
for i := range buckets {
buckets[i] = []int{}
}
for _, n := range arr {
idx := (n - min) / bucketSize
buckets[idx] = append(buckets[idx], n)
}
result := []int{}
for _, bucket := range buckets {
sort.Ints(bucket) // 使用内置排序算法
result = append(result, bucket...)
}
return result
}
桶排序是一种非常有趣且实用的排序算法,特别适用于数据分布均匀且范围广泛的场景。通过合理选择桶的数量和大小,可以实现非常高的排序效率。
桶排序也是对排序算法适应不同场景的一个很好的案例,展示了如何根据具体问题设计合适的解决方案。