zoukankan      html  css  js  c++  java
  • 算法--计数排序

    计数排序

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

  • 相关阅读:
    进度3
    进度2
    进度1
    库存物资管理系统
    课程管理系统
    文件与流作业
    bzoj4027: [HEOI2015]兔子与樱花
    bzoj2067: [Poi2004]SZN
    bzoj2071:[POI2004]山洞迷宫
    bzoj1063: [Noi2008]道路设计
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/12891792.html
Copyright © 2011-2022 走看看