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
  • 相关阅读:
    ES6 对Math对象的扩展
    ES6 对Number的扩展
    monolog 应该是世界上最好的日志插件了
    ES6 解构赋值的常见用途,很强大
    ES6 对象的解构赋值
    ES6 数组的解构赋值
    ES6 const
    laravel相关插件
    c++ 库 boost安装
    Eclipse ftp插件
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/9943271.html
Copyright © 2011-2022 走看看