排序之计数排序
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 }