计数排序
现在有一个列表,已知列表中的数范围都在0到100之间。设计算法在O(n)时间复杂度内将列表进行排序。
创建一个列表,用来统计每个数出现的次数。
li = [1, 5, 3, 8, 2, 8, 3, 7, 5] def count_sort(li, max_num=100): count = [0 for n in range(max_num + 1)] # [0, 0, 0, ....] for item in li: count[item] += 1 # [0, 1, 1, 2, ...] 1出现1次,2出现1次,3出现2次... (li的元素值==count元素索引值) li.clear() for i, j in enumerate(count): for k in range(j): li.append(i) count_sort(li) print(li) # [0, 1, 4, 2, ...] 1出现1次,2出现4次,3出现2次... (li的元素值==count元素索引值) # 0 1 2 3
时间复杂度: O(n)
缺点:
(1). 不知道最大的数
(2). [1, 1亿] 最大数1亿, 需要建一个长度1亿的列表