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

    计数排序是一种O(n)的排序算法,其思路是开一个长度为 maxValue-minValue+1 的数组,然后

    分配。扫描一遍原始数组,以当前值- minValue 作为下标,将该下标的计数器增1。
    收集。扫描一遍计数器数组,按顺序把值收集起来。
    举个例子, nums=[2, 1, 3, 1, 5] , 首先扫描一遍获取最小值和最大值, maxValue=5 , minValue=1 ,于是开一个长度为5的计数器数组 counter ,
    1. 分配。统计每个元素出现的频率,得到 counter=[2, 1, 1, 0, 1] ,例如 counter[0] 表示值 0+minValue=1 出现了2次。
    2. 收集。 counter[0]=2 表示 1 出现了两次,那就向原始数组写入两个1, counter[1]=1 表示 2 出现了1次,那就向原始数组写入一个2,依次类推,最终原始数组变为 [1,1,2,3,5] ,排序好了。

    计数排序本质上是一种特殊的桶排序,当桶的个数最大的时候,就是计数排序。

    代码如下:

    def count_sort(nums):
        MAX=max(nums)
        MIN=min(nums)
        arrays_nums=MAX-MIN+1
        arrays=[0 for i in range(arrays_nums+1)]
        for i in nums:
            arrays[i]+=1
        target=[]
        for i in range(len(arrays)):
            tmp=arrays[i]
            while tmp:
                target.append(i)
                tmp-=1
        return target
  • 相关阅读:
    webpack打包注意事项
    打印内存, 打印16进制
    c++ 字符集转换
    RegSvr32 加载失败,找不到指定的模块
    错误码设计
    mfc 移动绘制的图形
    获取、设置光标
    c++ 函数中定义函数
    python linux 自动补全 tab.py
    3.4.5节 完整神经网络样例程序
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/9943271.html
Copyright © 2011-2022 走看看