#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int MAX = 100000;
const int k=1000;
//a为输入数组,rank为输出顺序,c[i]表示i出现的次数
int a[MAX],c[MAX],rank[MAX];
void jsort(int n)
{
memset(c,0,sizeof(int)*MAX); //初始化c数组
//检查每个输入元素,如果一个输入元素值为5,那么c[5]++;c[i]中存放了值为i的元素的个数
for(int i=0;i<n;i++) c[a[i]]++;
//通过在c中记录计数和,c[i]中存放的是小于等于i的元素的数字个数
for(int i=1;i<k;++i) c[i]+=c[i-1];
//rank记录每个数字的输出顺序
for(int i=n-1;i>=0;--i) rank[--c[a[i]]]=i;
for(int i=0;i<n;++i) cout<<a[rank[i]]<<endl;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%d",&a[i]);
jsort(n);
return 0;
}
计数排序
最新推荐文章于 2023-08-05 19:04:02 发布