计数排序
来源:互联网 发布:杭州两年java工资 编辑:程序博客网 时间:2024/06/05 15:16
计数排序,他的主要目的是对整数排序并且会比普通的排序算法性能更好。
初始化一个计数数组,大小是输入数组中的最大的数。
遍历输入数组,遇到一个数就在计数数组对应的位置上加一。例如:遇到5,就将计数数组第五个位置的数加一。
把计数数组直接覆盖到输出数组(节约空间)。
/* * 计数排序 * 这种算法只适用于已知所排序元素范围的排序操作 * 有一定的局限性 * 对于计数,一般只能是正数,因为数组的下标是不能为负的 */#include <iostream>#include <time.h>#define size 10using namespace std;void printsort(int p[],int n){ for(int i=0;i<n;i++) cout<<p[i]<<" ";}int findmax(int p[],int n){ int max=p[0]; for(int i=1;i<n;i++) { if(p[i]>max) max=p[i]; } return max;}void countersort(int p[],int n,int q[],int m){ for(int i=0;i<n;i++) { if(p[i]>0) q[p[i]-1]++; } cout<<"计数数组:"<<endl; int num1=0; for(int i=0;i<m;i++) { cout<<q[i]<<" "; num1++; if(num1%10==0) cout<<endl; } cout<<endl; int num=0; for(int i=0;i<m;i++) { if(q[m]!=0) { for(int j=0;j<q[i];j++) p[num++]=i+1; } }}int main(){ int p[size]={0}; srand((unsigned)time(NULL));//保证每次生成的数不一样 cout<<"需排序数组:"<<endl; for(int i=0;i<size;i++) //随机生成10个大于0的数 { p[i]=rand()%100+1; cout<<p[i]<<" "; } cout<<endl; int size2=findmax(p,size);//得到计数数组的大小 int q[size2]={0}; countersort(p,size,q,size2); cout<<"排序后:"<<endl; printsort(p,size); return 0;}
0 0
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- v4l2-ctl 控制命令
- Activity的生命周期记录
- RAID及软RAID的实现,包括各级别RAID的原理及各级别RAID的实现
- Hadoop文档学习笔记
- Spring Boot中使用MongoDB数据库
- 计数排序
- Hust oj 1861 猥琐宅男——koko(DP)
- Servlet cookies处理
- org.apache.commons.lang.exception.NestableRuntimeException
- Android实践-个人项目-生活助手之开启篇
- idea svn 更改密码后每次仍然需要重新输入密码
- HDOJ.2037 今年暑假不AC (贪心)
- 全屏滚动的实现
- 线性表的链式存储结构