算法--计数排序

计数排序

现在有一个列表,已知列表中的数范围都在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亿的列表

猜你喜欢

转载自www.cnblogs.com/zhzhlong/p/12891792.html