以空间换时间的计数排序
来源:互联网 发布:美国基建 知乎 编辑:程序博客网 时间:2024/05/15 09:19
计数排序
我们前面学习的插入、归并、堆和快速排序都是比较排序,即在排序的最终结果中,各元素的次序依赖于它们之间的比较。我们说过比较排序有时间下界,即nlgn,如果我们需要一个时间复杂度为O(n)的排序算法,要怎么办? 计数排序就是比较好的选择。计数排序的基本思想是:对每一个输入的元素x,确定小于x的元素个数。利用这一信息可以直接把x放到它的输出数组中的位置上。 这就要求我们需要很大的空间去存储临时变量。假设对于有n个元素的数组,每一个元素都是在0到k区间内的一个整数,并需要一个与输入数组一样大的输出数组。
void count_sort(int *a,int *b,int n,int k){ int c[k]={0}; //count the element nums for(int i=0;i<n;i++) c[a[i]]=c[a[i]]+1; for(int i=1;i<k;i++) c[i]+=c[i-1]; for(int i=n-1;i>=0;i--) { b[c[a[i]]-1]=a[i]; c[a[i]]-=1; }}
我们可以看成计数排序的时间复杂度是O(n),但是空间复杂度是O(n+k)。
0 0
- 以空间换时间的计数排序
- 以空间换时间
- 以时间换空间
- 以空间换时间的排序(不发生交换的排序)
- 以时间换空间、以空间换时间、垃圾回收
- 以空间换时间思想
- 简单空间换时间排序的例子
- 丑数-以空间换时间的思想
- 排序算法的时间复杂度以及空间复杂度 计数排序
- 以空间换时间经典算法
- 以空间换时间计算Fibonacci数列
- HDU 2844 Coins (多重背包计数 空间换时间)
- 空间换时间一排序算法
- 1006 排序输出 关于空间换时间...******
- 以空间换时间--Google一道关于堆栈操作的面试题
- C语言高效编程的四大秘技之以空间换时间
- 函数定义为宏(以编译时间换空间)inline修饰的内联(内嵌)函数(空间换时间)
- 【算法导论-学习笔记】以线性时间增长的排序——计数排序
- linux的shell(bash)脚本学习
- 二进制文件读取
- HDU 5886 Tower Defence (最长链预处理)
- RDBMS
- 输入姓名编号排序
- 以空间换时间的计数排序
- mysql索引优化
- Android百度地图开发(一)
- Android:使用VideoView播放视频
- Ioc中装配bean的几种方式
- 他只掌握了这3点,却在现货投资市场中挣走千万!
- 安卓学习心得,学习步骤 入门书籍推荐
- 第三周 项目1-顺序表的基本运算
- JavaEE项目实战(OA系统)之十四_员工管理之三