计数排序
来源:互联网 发布:java工程反编译 编辑:程序博客网 时间:2024/06/05 06:22
计数排序是一种费比较的排序算法,它的思想其实很简单,就是先开辟一块空间用来存放数据出现的次数,然后就要统计出数据出现的次数,并将其放在对应的位置下标上,最后我们可以根据统计的次数依次还原出来就有序了,如下图分析:
代码实现:
void CountSort(int* a,int n){assert(a);int max=a[0];int min=a[0];//1.先统计数据中的最大值和最小值,然后确定范围for(int i=0;i<n;++i){if(a[i]>max)max=a[i];if(a[i]<min)min=a[i];}int range=max-min+1;int* count=new int[range]; //用来存放数据出现的次数memset(count,0,sizeof(int)*range);//2.遍历数据放在对应的位置for(int i=0;i<n;++i){count[a[i]-min]++;}//3.将数据按统计的次数依次还原int index=0;for(int i=0;i<range;++i){while(count[i]--){a[index++]=i+min;}}delete[] count;}
计数排序,在数据范围比较大或是数据太过分散的时候占用空间就很大,这种情况就不太适用,而且只能对无符号数进行排序(没有比较),但是它有一个很明显的优势是:在数据范围较集中时,排序效率是相当高的。
时间复杂度为O(N+范围),空间复杂度为O(范围)。
0 0
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 详解PHP的执行原理和流程
- 蔬菜大棚控制与WEB
- 数组复制
- 事件分发学习笔记二(ViewGroup篇)
- Triangle
- 计数排序
- hibernate笔记
- Windows下ElasticSearch安装中的问题解决
- 矩形面积交
- 网页嵌入优酷视频 改变播放按钮大小 去广告(适合最新分享地址)
- socket通信 accept函数
- 是时候, 该好好定义什么是敏捷了...
- 283. Move Zeroes
- 硬件基础知识(二)