计数排序

来源:互联网 发布:淘宝指数官网下载 编辑:程序博客网 时间:2024/06/05 23:07

计数排序是一种On的排序,但是要求输入的数据不大于k。算法思路比较容易,统计每个输入x在数组中的位置,也就是统计小于等于x的数有几个。得出x在排序后的位置

#include <cstdio>#include <cstring>#include <cstdlib>const int MAXN=10010;void countSort(int in[],int ans[],int n,int k){//对每一个不大于k的数进行排序int tmp[k];memset(tmp,0,sizeof(tmp));for(int i=0;i<n;i++)tmp[in[i]]++;for(int i=1;i<=k;i++)//统计小于等于i的个数是多少tmp[i]+=tmp[i-1];//for(int i=1;i<k;i++)printf("%d ",tmp[i]);for(int i=0;i<n;i++){//从n-1开始遍历得到一个稳定的排序ans[tmp[in[i]]-1]=in[i];tmp[in[i]]--;}}int main(){freopen("./in.txt","r",stdin);int n;int a[MAXN],ans[MAXN];while(scanf("%d",&n)!=EOF){int maxNum=-1;for(int i=0;i<n;i++){scanf("%d",&a[i]);if(maxNum<a[i])maxNum=a[i];}countSort(a,ans,n,maxNum+1);for(int i=0;i<n;i++)printf("%d ",ans[i]);printf("\n");}}

数组作为形参int a[]<=>int *a可以在函数中用sizeof运算符查看a占了多少