UVa 11462 Age Sort (计数排序&快速输入输出)

来源:互联网 发布:软件外包项目 编辑:程序博客网 时间:2024/06/14 05:13

11462 - Age Sort

Time limit: 5.000 seconds

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=460&page=show_problem&problem=2457

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 (0<n<=2000000), the total number of people. In the next line, there are integers indicating the ages. Input is terminated with a case where = 0. This case should not be processed.

 

Output

For each case, print a line with 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                                                     Output for Sample Input

5

3 4 2 1 5

5

2 3 2 3 1

0

1 2 3 4 5

1 2 2 3 3

Note: The memory limit of this problem is 2 Megabyte Only.



注意注意:内存限制自由2M,所以sort不可用,但数字的范围在1~100间,所以用计数排序

复杂度:O(n)


完整代码:

/*0.158s*/#include<cstdio>#include<cstring>#include<cctype>int buf[10]; // 声明成全局变量可以减小开销inline int readint(){char c = getchar();while (!isdigit(c))c = getchar();int x = 0;while (isdigit(c)){x = x * 10 + (c & 15); // 数字处理优化,少了4msc = getchar();}return x;}inline void writeint(int i){int p = 0;if (i == 0)p++; // 特殊情况:i等于0的时候需要输出0,而不是什么也不输出elsewhile (i){buf[p++] = i % 10;i /= 10;}for (int j = p - 1; j >= 0; j--)putchar('0' + buf[j]); // 逆序输出}int main(void){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;}


原创粉丝点击