号称效率为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
- 号称效率为O(n)的排序算法-----计数排序
- 时间复杂度为O(n)的排序算法--计数算法
- 实现一个时间效率为O(N)的排序算法
- 复杂度为o(n)的计数排序
- O(N)时间复杂度的排序算法-计数排序
- 一个时间效率为n的排序算法
- O(n)时间的排序---计数排序
- 时间效率为O(n)的特殊排序算法-剑指offer
- 一个时间效率为O(n)的排序算法(Java实现)
- 公司员工年龄的排序,时间效率为O(n)
- 时间为O(n)排序——计数排序
- 时间效率O(N)的排序
- 计数排序(O(n))
- 计数排序详解:O(n)
- 计数排序,传说中时间复杂度O(n+k)的排序算法
- 时间复杂度为O(n)的排序算法
- 面试9:时间复杂度为O(n)的排序算法
- 基于时间复杂度为O(n)的排序算法
- 国内值得关注的新网盘
- 在线分析图片上的字体
- LR使用web_add_cookie函数进行cookie模拟
- 生成动态连接库、静态连接库的 makefile
- Linux开发技巧──库文件的使用
- 号称效率为O(n)的排序算法-----计数排序
- 《Windows 7 Beta 产品指南》中英文版原版
- Asp.net状态管理小结
- ASP防注入漏洞方法
- How the Scientific Method Works
- 纪念两个IBM实习OFFER的死去
- Office 2010 Technical Preview 1 x86&x64
- 2009.5.17 OA项目组一周工作报告
- chain of Responsibility pattern