- 根据数据范围,分成若干个数据段的桶,通过遍历数据放到对应的桶中
- 每个桶里都进行快排或归并
- 最好O(n),最坏O(nlogn),平均O(n)
- 当待排序元素个数很多,但值域范围很窄时,计数排序是很节省空间的
- 计数排序需要一个辅助空间,空间大小为O(MAX - MIN), 用来存储所有元素出现次数("计数")
- 计算排序的核心,空间换时间
- 空间复杂度为: O(n)
- 稳定,只要整理最后结果时,从后开始遍历即可
- 数据范围不大,如年龄排序
例子(来源)
- 假设待排序的数组
- arr = {5, 3, 7, 1, 8, 2, 9, 4, 7, 2, 6, 6, 2, 6, 6}
- 很容易发现,待排序的元素在[0, 10]之间,可以用counting[0, 10]来存储计数
- 第一步:统计计数
- 第二步:还原数组