1 #include <iostream>
2 using namespace std;
3 const int MAXN=100000;
4 const int k=1000;
5 int a[MAXN],c[MAXN],ranked[MAXN];//统计数组中每个值为i的元素出现的次数,存入数组C的第i项
6 int main()
7 {
8 int n;
9 cin>>n;//n个数需要排
10 for(int i=0;i<n;i++){
11 cin>>a[i];//输入n个数
12 ++c[a[i]];//统计重复个数,c[a[i]]中存放了值为a[i]的元素的个数 。
13 } //一位数的序列对基数排序来说就是一个计数排序
14 for(int i=1;i<k;i++){
15 c[i]+=c[i-1];
16 // 通过在c中记录计数和,c[i]中存放的是小于等于i元素的数字个数 ,计票
17 }
18
19 for(int i=n-1;i>=0;i--){
20 ranked[c[a[i]]-1]=a[i];//反向填充目标数组。投票过程结束,每人都拥有自己的票数,桶数组说,看好你自己的票数,进入与你票数相等的桶
21 c[a[i]]--;
22 }
23 for (int i = 0; i < n; ++i)
24 cout << ranked[i] << endl;
25 return 0;
26 }