Age Sort UVA - 11462(计数排序)
2018-03-12 10:13
441 查看
题目链接
https://vjudge.net/problem/UVA-11462题目
You are given the ages (in years) of all people of a country with at least 1 year of age. You know thatno individual in that country lives for 100 or more years. Now, you are given a very simple task of
sorting all the ages in ascending order.
Input
There are multiple test cases in the input file. Each case starts with an integer n (0 < n ≤ 2000000), thetotal number of people. In the next line, there are n integers indicating the ages. Input is terminated
with a case where n = 0. This case should not be processed.
Output
For each case, print a line with n space separated integers. These integers are the ages of that countrysorted in ascending order.
Warning: Input Data is pretty big (∼ 25 MB) so use faster IO.
Sample Input
53 4 2 1 5
5
2 3 2 3 1
0
Sample Output
1 2 3 4 51 2 2 3 3
题意
给定n个居民的年龄(1~99),把它们按照由小到大的顺序输出。分析
如果直接用sort排序,需要用一个数组来存放n个居民的年龄,而题目中说明输入有25M,内存限制为2M。所以理论上不能直接调用sort。(但我直接用sort也AC了。。。)
虽然n很大,但是每个居民的年龄范围很小。所以,可以考虑用计数排序。把每个年龄的人数纪录下来,然后按照年龄和该年龄的人数输出即可。这样只需开一个大小为101的数组。
代码
#include <cstdio> #include <cstring> using namespace std; int n,buf[101]; int main() { while(~scanf("%d",&n) && n) { int x; memset(buf,0,sizeof(buf)); for(int i=0;i<n;i++) { scanf("%d",&x); buf[x]++; } int cnt=0; for(int i=1;i<=99;i++) for(int j=1;j<=buf[i];j++) { cnt++; if(cnt==n) printf("%d\n",i); else printf("%d ",i); } } return 0; }
相关文章推荐
- Uva-------(11462) Age Sort(计数排序)
- uva11462(Age sort)(计数排序)
- UVA11462-(Age sort)(计数排序)
- UVA11462 Age Sort【基数排序/桶排序/计数排序】
- uva11462 Age Sort ——计数排序
- UVA 11462 Age Sort 计数排序 .
- UVa 11462 Age Sort (计数排序&快速输入输出)
- UVa 11462 - Age Sort (桶排序)
- UVA11462——排序——Age Sort
- UVA - 11462 Age Sort
- uva 11462 - Age Sort(计数排序+输入外挂)
- 【UVA 11462】 Age Sort(基数排序)
- 指南第一章 例题 17 UVA 11462 Age Sort(桶排序)
- Age Sort UVA 11462
- uva 11462 Age Sort
- uva 11462 Age Sort
- UVA-11462 Age Sort
- UVA 11462 Age Sort(计数排序法 优化输入输出)
- UVA 11462 Age Sort
- UVa 11462 - Age Sort (桶排序)