定义
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。
作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数
基本思想
对每一个输入的元素a[i],确定小于 a[i] 的元素个数。所以可以直接把 a[i] 放到它输出数组中的位置上。
假设有5个数小于 a[i],所以 a[i] 应该放在数组的第6个位置上
代码
def count_sort(alist):
# 找到最大最小值
min_num = min(alist)
max_num = max(alist)
# 初始化计数列表
count_list = [0]*(max_num-min_num+1)
# 对列表中的每一个元素计数
for num in alist:
count_list[num-min_num] += 1
alist.clear()
# 当某个元素的个数不为 0,将该元素填回alist列表
for cur_num, count in enumerate(count_list):
while count != 0:
alist.append(cur_num+min_num)
count -= 1
return alist
count_sort([3,6,8,4,2,6,7,3])