排序之计数排序

 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 }

 

posted on 2018-02-01 16:24  wsw_seu  阅读(135)  评论(0编辑  收藏  举报

导航