http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2457
注意后台数据25m,内存不超2m,所以全输入进不去。
计数排序,用于已知数据大小(需要排序的数)的序列的排序。
思想是,出现一次,对应数组的值就加一,然后输出的时候,输出对应数组的值,循环输出这个数组的下标就可以了。比如1,1,1,2,3,3,3,3,3这个数组,1出现了三次,2出现了一次,3出现了五次,所以就输出三个一,一个二,五个三,即为排序后结果。
思想很巧妙,但是明白了就会觉得很自然了。
下面是代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n;
int c[101];
while(cin>>n && n)
{
memset(c,0,sizeof(c));
for(int i = 0; i < n; i++)
{
int sub;
cin>>sub;
c[sub]++;
}
int flag = 1;
for(int i = 1; i < 100; i++)
{
for(int j = 0; j < c[i]; j++)
{
if(!flag) cout<<' ';
cout<<i;
flag = 0;
}
}
cout<<endl;
}
}