计数排序
来源:互联网 发布:用友t3数据库安装 编辑:程序博客网 时间:2024/06/07 03:00
所谓排序算法,无非就是把正确的元素放到正确的位置,计数排序就是计算相同key的元素各有多少个,然后根据出现的次数累加而获得最终的位置信息。计数排序不是基于比较的排序算法,时间效率为O(n),是最快的排序算法!但是计数排序有两个限制条件:
1、存在一个正整数K,使得数组里面的所有元素的key值都不大于K
2、key值都是非负整数。
以下代码是经过改进的计数排序代码:
void CountSort(int ages[], int length,int maxData){if (ages==NULL||length<=0){return;//输入不合法}int *timeOfAge = new int[maxData+1]; //哈希表,开辟空间for (int i = 0; i <= maxData;i++) //必须初始化,因为后面是自增操作,不然结果不对!{timeOfAge[i] = 0;}int age;for (int i = 0; i < length;i++){age = ages[i];if (age<0||age>maxData) //不能大于最大年龄和小于最小年龄{throw new std::exception("age out of range");}++timeOfAge[age];}int index = 0;for (int i = 0; i <=maxData;i++)//常数次{for (int j = 0; j < timeOfAge[i];j++)//年龄为i的个数为timeOfAge[i]{ages[index] = i;index++;}}delete[] timeOfAge;//释放空间}
通过以上代码可以发现:计数排序的时间复杂度是以牺牲辅助存储空间为代价的。所以如果面试官要求实现一个排序算法,那么应聘者一定要问清楚这个排序应用的环境是什么、有哪些约束。如果不允许开辟额外的存储空间或者输入的值中存在负数,那就不能使用计数排序!
0 0
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- Android Fragment 你应该知道的一切
- 本地(windows)连接远程服务器(Ubuntu)工作的几种方式
- Learning Python(13)--文件读写
- 前端学习笔记(四)——css
- [c++]关于时间函数的总结
- 计数排序
- day10—JDBC
- HDU杭电 1177 Accepted today
- 欢迎使用CSDN-markdown编辑器
- Java内存管理:深入Java内存区域
- Win7 Qt4.8.5+QtCreator2.8.0+mingw配置过程
- Codeforces--615B--Longtail Hedgehog(贪心模拟)
- PAT_Basic 1020
- 浮点型数据转二进制