Pagini recente » Cod sursa (job #1164688) | Cod sursa (job #1991839) | Cod sursa (job #1551915) | Cod sursa (job #3220856) | Cod sursa (job #838144)
Cod sursa(job #838144)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 500001;
int mask[] = {0x0000000f, 0x000000f0, 0x00000f00, 0x0000f000,
0x000f0000, 0x00f00000, 0x0f000000, 0xf0000000};
int id = 0;
int n;
int A[MAXN];
int B[MAXN];
void csort(int maxval)
{
int C[maxval];
memset(C, 0, sizeof(C));
for (int i = 0; i < n; ++i) {
int val = (A[i] & mask[id]) >> (4 * id);
C[val]++;
}
for (int i = 1; i < maxval; ++i)
C[i] += C[i - 1];
for (int i = n - 1; i >= 0; --i) {
int val = (A[i] & mask[id]) >> (4 * id);
B[C[val]] = A[i];
C[val]--;
}
for (int i = 0; i < n; ++i)
A[i] = B[i + 1];
}
void rsort()
{
while (id < 8) {
csort(16);
id += 1;
}
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
cin >> n;
for (int i = 0; i < n; ++i)
cin >> A[i];
rsort();
for (int i = 0; i < n - 1; ++i)
cout << A[i] << " ";
cout << A[n - 1] << "\n";
return 0;
}