UVA 11462 Age Sort(计数排序法 优化输入输出)
2013-07-20 18:12
316 查看
[b]Age Sort[/b]
You are given the ages (in years) of all people of a country with at least 1 year of age. You know that no 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), the total 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.
Warning: Input Data is pretty big (~ 25 MB) so use faster IO.
3 4 2 1 5
5
2 3 2 3 1
0
1 2 2 3 3
题目大意:给定若干居民的年龄(都是1-100之间的整数),把他们按照从小到大的顺序输出。
分析:年龄排序。由于数据太大,内存限制太紧(甚至都不能把他们全部读进内存),因此无法使用快速排序方法。但整数范围很小,可以用计数排序法。
代码如下:
You are given the ages (in years) of all people of a country with at least 1 year of age. You know that no 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), the total 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 country sorted 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
Output for Sample Input
1 2 3 4 51 2 2 3 3
题目大意:给定若干居民的年龄(都是1-100之间的整数),把他们按照从小到大的顺序输出。
分析:年龄排序。由于数据太大,内存限制太紧(甚至都不能把他们全部读进内存),因此无法使用快速排序方法。但整数范围很小,可以用计数排序法。
代码如下:
#include<cstdio> #include<cstring> #include<cctype> // 为了使用isdigit宏 inline int readint() { char c = getchar(); while(!isdigit(c)) c = getchar(); int x = 0; while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); } return x; } int buf[10]; // 声明成全局变量可以减小开销 inline void writeint(int i) { int p = 0; if(i == 0) p++; // 特殊情况:i等于0的时候需要输出0,而不是什么也不输出 else while(i) { buf[p++] = i % 10; i /= 10; } for(int j = p-1; j >=0; j--) putchar('0' + buf[j]); // 逆序输出 } int main() { int n, x, c[101]; while(n = readint()) { memset(c, 0, sizeof(c)); for(int i = 0; i < n; i++) c[readint()]++; int first = 1; for(int i = 1; i <= 100; i++) for(int j = 0; j < c[i]; j++) { if(!first) putchar(' '); first = 0; writeint(i); } putchar('\n'); } return 0; }
相关文章推荐
- UVA 11462 Age sort (基数排序+优化输入输出)
- UVA 11462 Age Sort(IO优化)
- UVa 11462 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【基数排序/桶排序/计数排序】
- UVA11462——排序——Age Sort
- ( 设计高效算法 ) 年龄排序 Age Sort Uva 11462
- uva 11462 - Age Sort(计数排序+输入外挂)
- UVA - 11462 - Age Sort (高效算法!!)
- uva 11462 Age Sort
- UVa 11462 - Age Sort (桶排序)
- UVA11462-(Age sort)(计数排序)
- UVA 11462 Age Sort
- uva11462 Age Sort ——计数排序
- Uva-------(11462) Age Sort(计数排序)