计数排序
2015-08-19 12:57
281 查看
计数排序是一个非比较的线性时间排序算法,时间复杂度为O(n),是稳定算法。该算法有一个前提条件:要排序的n个元素都是在[0,k)范围的整数,其中k是某个整数。
计数排序的基本思想是:对每一个元素x,确定了小于x的元素的个数,然后直接把x放到数组对应的位置上。需要一个临时数组保存每个元素的个数。
C语言代码如下:
计数排序的基本思想是:对每一个元素x,确定了小于x的元素的个数,然后直接把x放到数组对应的位置上。需要一个临时数组保存每个元素的个数。
C语言代码如下:
#include <iostream> using namespace std; /* arr为输入数组, ret为输出数组,len为数组长度 lower表示数组下限, upper表示数组下限 /* void calcSort(const int* arr, int* ret, int len, int lower, int upper) { if (NULL == arr || NULL == ret) { return; } int* tmp = new int[upper-lower]; for (int i = 0; i < upper - lower; ++i) { tmp[i] = 0; } for (int i = 0; i < len; i++) { tmp[arr[i] - lower] += 1; } for (int i = 1; i < upper - lower; i++) { tmp[i] += tmp[i-1]; } for (int i = len - 1; i >= 0; --i) { ret[tmp[arr[i] - lower]-1] = arr[i]; tmp[arr[i] - lower]--; } delete[] tmp; } int main() { int arr[] = {20,28,26,25,23,24,21,24,25,28,29,25,27,29}; int ret[20] = {0}; int len = sizeof(arr)/sizeof(*arr); calcSort(arr, ret, len, 20, 30); for (int i = 0; i < len; i++) { cout << ret[i] << " "; } cout << endl; return 0; }
相关文章推荐
- 文件分类汇总
- Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)
- 车牌识别
- Post和Get差异
- Android(java)学习笔记176:BroadcastReceiver之 短信发送的广播接收者
- hdu5399 思考的细节比较多
- HDU 2868 Neighbor Friend
- hdu5400
- 常用服务器 整理
- 数据库表的基本操作——创建一个表,索引和查询
- iOS网络-02-数据解析(JSON与XML)
- hdu 1286 找新朋友(欧拉函数)
- 链表(java版本)
- iOS 报错信息: dyld: Library not loaded: @rpath/XCTest.framework/XCTest Referenced from
- 注解的使用
- cef架构
- 数独游戏java版(一)--核心算法
- ANDROID音频系统散记之五:如何绕开多媒体音轨的重采样
- Mat类基础知识
- bzoj 1036 树链剖分 迭代 模板