您的位置:首页 > 其它

计数排序

2015-07-18 12:08 330 查看
今天补CF的E,发现有个排序不会,计数排序,特地学习了一下

#include<iostream>

#include<cstdio>

#include<string.h>

#include<cstring>

#include<string>

#include<stack>

#include<set>

#include<algorithm>

#include<cmath>

#include<vector>

#include<map>

#define LOCAL

#define ll long long

#define lll unsigned long long

#define MAX 1000009

#define eps 1e-8

#define INF 0x7fffffff

#define mod 1000000007

using namespace std;

/*

题意:计数排序

想法:把每个数字的出现的最后一个位置计算出来,然后按照a数组的数字出现的次序,逐一插入。

*/

int a[MAX];

int b[MAX];

int c[MAX];

int main()

{

//freopen("date.in","r",stdin);

int n;

int k = -INF;

scanf("%d",&n);

for(int i = 0;i<n;i++)

{

cin>>a[i];

k = max(k,a[i]);

c[a[i]]++;//统计a数组中,每个a[i]的个数

}

for(int i = 1;i<=k;i++)

{

c[i]+=c[i - 1];//统计a数组中,小于等于值为i的元素 个数

}

for(int i = n - 1;i>=0;i--)

{

b[--c[a[i]]] = a[i];

}

for(int i = 0;i<n;i++)

{

if(i)

puts(" ");

printf("%d",b[i]);

}

puts("");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: