时间复杂度为O(n)的排序算法
来源:互联网 发布:景区ip网络广播系统 编辑:程序博客网 时间:2024/05/16 19:01
时间复杂度为O(n)的排序算法
看上去似乎任何已知的算法都无法做到,如果谁做到了,那么所有的排序方法:QuickSort,ShellSort,HeapSort,BubbleSort等等等等,都可以扔掉了,还要这些算法干吗阿,呵呵。
不过实际上,在数字范围有限制的情况下,是有一个这样的算法的,只需要用一个数组记录每个数字出现次数就可以了。
不过实际上,在数字范围有限制的情况下,是有一个这样的算法的,只需要用一个数组记录每个数字出现次数就可以了。
假定你的数字范围在0到65535范围之内,定义一个数组count[65536](这个空间是常量,和n无关,所以是O(1) ),初值全部为0。
那么假设有下面这些数字:
100
200
300
119
0
6
...
那么对于每个这个数字,都做在count中记录一下:
100 => count[100]++
200 => count[200]++
300 => count[300]++
119 => count[119]++
0 => count[0]++
6 => count[6]++
...
最后,遍历一边所有这些数字就可得到0~65535每个数字的个数(在count数组中),然后再顺序遍历count数组,count[n] = m,则输出m个n,(比如说有count[3] = 2, 那么说明有2个数字3),依次输出,最后可得结果。第一次遍历是O(n),第二次遍历是O(1),为常量,所以最后的时间复杂度为O(n),而空间复杂度为O(1)
转自:http://blog.163.com/hancker_31/blog/static/355873612010891171687/
- 时间复杂度为O(n)的排序算法--计数算法
- 时间复杂度为O(n)的排序算法
- 面试9:时间复杂度为O(n)的排序算法
- 基于时间复杂度为O(n)的排序算法
- 时间复杂度为O(N),空间复杂度为O(1)的排序算法
- 时间复杂度为O(n)的排序
- 时间复杂度为O(n)的排序
- 实现排序算法,时间复杂度为O(n)
- 不用额外空间的整数交换以及时间复杂度为O(n)空间复杂度为O(1)的排序算法
- Java练习:时间复杂度为O(n*n)的三大基本排序算法
- O(N)时间复杂度的排序算法-计数排序
- 基于堆栈的时间复杂度为O(n)的箱子排序算法实现
- 时间复杂度为O(n+t)的排序
- 用哈希算法的思想解决排序和字符串去重问题,时间复杂度为O(N)
- 有1,2...一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),时间复杂度为O(1)
- 排序的时间复杂度为O(n),空间复杂度为O(1)
- 排序算法-o(n)时间复杂度
- 平均时间复杂度为O(n)的选择算法
- Android MIME类型
- 关于Java文件路径问题
- float浮动 和 hasLayout 研究心得
- jQuery风暴教程-JavaScript中的原型
- mkdir的参数-p的作用
- 时间复杂度为O(n)的排序算法
- 找出数组中是否有重复的数
- 循环(迭代)与递归的区别
- 隐藏WinForm窗体边框
- 死锁产生的原因及四个必要条件
- java富客户端
- keil应用小贴士:microLIB
- SQL SERVER行列转换
- IBM eserver x336 8837 安装Ubuntu 10.04.2 desktop 错误