其实桶排序就不是什么排序算法,只是说一种做法
桶排序的意思就是把一段要排序的分段各自排序好了再组合
注意,桶之间的大小关系是明确的,所以到时候直接连接即可
计数排序大概就是说,把每一个数都分成桶了,一个桶的下标是数字,桶的值是数字次数
(当然比如力扣347,桶下标就是要的数字次数,而桶的值就是要的数字)
所以不如这么说,桶排序,下标是要排序的目标,而桶的值则是目标出现的次数。
计数排序:
因为下标要覆盖0到最大值的每一个值,所以数组的长度是排序目标的最大值+1
特别适合于以下几种情况:
数据范围有限:计数排序要求待排序的元素必须是整数,并且这些整数的范围
(最大值与最小值之间的差距)不能太大。这是因为计数排序需要为这个范围
内的每个可能值创建一个计数桶,如果范围过大,会导致需要大量额外的内存
空间,变得不切实际。
元素分布均匀或重复度高:当数据集中存在大量重复的元素,或者元素的分布
较为均匀时,计数排序能非常高效地工作。它通过计算每个元素的频数,可以
直接定位每个元素在输出序列中的位置,特别适合处理大量相同或相近数值的
排序问题。
数据规模与范围的关系:当数据集的规模(n)远大于数据范围(max-min+1)
的最大值时,计数排序的时间复杂度接近O(n),这时计数排序相比基于比较的
排序算法(如快速排序、归并排序等,平均时间复杂度为O(n log n))会有显
著的性能优势。