题目大意:给定若干个居民的年龄(都是1-100之间的整数),把它们按照从i型奥到大的顺序输出。输入第一行为整数n(0<n<=2000000),第二行为n个整数,输入结束标志n=0。输入文件约25MB,内存限制为2MB。
思路:数据太大,内存限制太紧,整数范围很小,故考虑计数排序(线性时间排序)
#include<stdio.h>//492ms
#include<string.h>
int main()
{
int n,x,c[101],i,j;
while(scanf("%d",&n)==1&&n)
{
memset(c,0,sizeof(c));
for(i=0;i<n;i++)
{
scanf("%d",&x);
c[x]++;
}
int flag=0;
for(i=1;i<=100;i++)
for(j=0;j<c[i];j++)
{
if(flag) printf(" ");
flag=1;
printf("%d",i);
}
printf("\n");
}
return 0;
}
优化后代码:
#include<cstdio>//208ms
#include<cstring>
#include<cctype>
inline int readint()
{
char c=ge