• 算法--计数排序


    计数排序

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

  • 相关阅读:
    人的一生为什么要努力 &1
    数据库_数据库系统概论
    电子商务安全
    虚拟专用网技术
    人的一生为什么要努力
    数据备份与恢复技术
    入侵检测技术
    简历模板连接
    防火墙技术
    字节与位
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/12891792.html
Copyright © 2020-2023  润新知