`
saillanbo
  • 浏览: 10223 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

计数排序(转载)

阅读更多
今天下午研究了下CountingSort算法,虽然这个算法的效率为O(n),简单测试了一下,确实蛮快的。但是这个算法的限制太多:

   数据集必须为正整数。。。(也就是说数据集中不能有负数和小数,连0都不行!!) 因此这个算法的应用范围很小,不过速度确实很快。其实网上已经有很多示例了,不过看和自己写一个示例感觉是完全不一样的,呵呵。。。



问:为什么这个算法能不比较就知道数值的位置呢?
答:因为这个算法引入了”数轴“的概念,”数轴“的作用相当于是一个计数器,记录了每个数值出现的频率,
”数轴“的大小应该为数据集中的最大值,以数据集中的数值作为索引(因此,前提条件是数据集必须都是正整数)
如在数组{1,2,3,4,5,4},”数轴“的大小应该为5 , 具体内容为:{1,1,1,2,1}
然后再计算数据集中的每个数值的位置:其实就是累加”数轴“ 累加后的结果为:{1,2,3,5,6}
因为”数轴“是有序的,因此,可以由”数轴“告诉你数据集中每个数值的位置,如:数值 3在整个数据集的第3位,直接插入即可。
这下明白了吧,关键就是”数轴“是有序的。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics