age sort – uva 11462

Problem

Here.

Summary

  • Sort 2,000,000 integers between 1 and 100.

Analyse

  • First idea: fast sort, merge sort O(nlogn), TIMELIMIT!
  • Use the counting sort algorithm!
  • Complexity: O(n).

Code in C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <cstring>
#include <cstdio>
using namespace std;
int n, age;
int first;
int a[100];
int () {
while (scanf("%d", &n) && n) {
memset(a, 0, sizeof(a));
first = 1;
for (int i = 0; i < n; i++){
scanf("%d", &age);
a[age]++;
}
for (int i = 1; i < 100; i++){
for (int j = 1; j <= a[i]; j++)
if (first) {
printf("%d", i);
first = 0;
}
else
printf(" %d", i);
}
printf("n");
}
return 0;
}