时间复杂度为O(n)的排序算法--计数算法
来源:互联网 发布:3c证书编号 淘宝 编辑:程序博客网 时间:2024/05/16 01:53
我们所要排序的数据往往是有一定规律的,甚至我们可以对排序数据做某种假设,告诉他们,我的代码在
什么什么情况下使用的效率是多么多么的出色。正所谓没有万能的理论,没有万能的代码。计数排序假设输入
数据是由一个小范围的数据构成,而且我们利用空间换取了时间。看个例子吧。
void CountingSort(const char *A, int len, char **ret)
{
if(len < 2 || !ret || !A)
{
return;
}
int Temp[256];
for(int i = 0; i < 256; i++)
{
Temp[i] = 0;
}
for(int i = 0; i<len; i++)
{
Temp[int(A[i])]++;
}
for(int i = 1; i<256;i++)
{
Temp[i]=Temp[i]+Temp[i-1];
}
for(int i = len-1; i >= 0 ; i--)
{
(*ret)[Temp[int(A[i])]-1] = A[i];
Temp[int(A[i])]--;
}
}
上面代码是计数排序的一个简单实现,是对字符以ASCII码值的大小进行排序。所以作者要在排序过程中申请一个
256整型大小的临时空间,这是用来存储ASCII码为n的字符前面有多少个字符的临时变量。
代码是比较容易看懂的,该算法的基本思想就是对于每个输入数据x,确定出小于他的元素的个数,有了这个就可
以把x放到最终输出的位置了。最后要说的是,计数排序可是个时间复杂度为O(n)的稳定排序啊
- 时间复杂度为O(n)的排序算法--计数算法
- O(N)时间复杂度的排序算法-计数排序
- 时间复杂度为O(n)的排序算法
- 面试9:时间复杂度为O(n)的排序算法
- 基于时间复杂度为O(n)的排序算法
- 时间复杂度为O(N),空间复杂度为O(1)的排序算法
- 计数排序,传说中时间复杂度O(n+k)的排序算法
- 计数排序算法,时间复杂度O(n),空间复杂度O(1)
- 复杂度为o(n)的计数排序
- 实现排序算法,时间复杂度为O(n)
- Java练习:时间复杂度为O(n*n)的三大基本排序算法
- 不用额外空间的整数交换以及时间复杂度为O(n)空间复杂度为O(1)的排序算法
- 排序算法-o(n)时间复杂度
- 号称效率为O(n)的排序算法-----计数排序
- 基于堆栈的时间复杂度为O(n)的箱子排序算法实现
- 平均时间复杂度为O(n)的选择算法
- 时间复杂度最快的排序算法 O(n) JAVA代码
- 用哈希算法的思想解决排序和字符串去重问题,时间复杂度为O(N)
- HttpContext.Current.User.Identity.IsAuthenticated 这个是表示的什么
- 3.4 long parameter list(过长参数列)
- 配置BlogEngine容易出错的地方及解决办法——HTTP 错误 404.2 - Not Found
- 利用反射与接口访问数据库的区别
- apue.h头文件(unix环境高级编程)
- 时间复杂度为O(n)的排序算法--计数算法
- 新手学习数据结构与算法---直接选择排序
- Ubuntu 11.10 下安装 JDK_6_27
- 一个基数排序(桶子算法)算法的例子
- c++中把int转化为char
- 配置BlogEngine的问题总结
- ubuntu11.10 安装谷歌拼音输入法详细步骤
- BaseAdapter
- 10.8 replace parameter with methods(以函数取代参数)