号称效率为O(n)的排序算法-----计数排序

来源:互联网 发布:windows app studio 编辑:程序博客网 时间:2024/05/24 03:22

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

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

 

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

 

上代码:

   CountingSort.h:

  

   头文件没啥好注释的。。。

   CountingSort.cpp:

   

   测试代码:

 

  

 

  所有程序在XP SP3,VC2008在编译通过。

   由于求最大值的类没有列出来,干脆我打个包发到资源上去。。。。。这个是整个完整的示例,有需要的朋友可以下载:

 

  http://download.csdn.net/source/1320980

 

原创粉丝点击