Pagini recente » Cod sursa (job #3218727) | Cod sursa (job #89901) | Cod sursa (job #2735494) | Cod sursa (job #1449838) | Cod sursa (job #838156)
Cod sursa(job #838156)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 500001;
int mask[] = {0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000};
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]) >> (8 * 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]) >> (8 * id);
B[C[val]] = A[i];
C[val]--;
}
for (int i = 0; i < n; ++i)
A[i] = B[i + 1];
}
void rsort()
{
while (id < 4) {
csort(256);
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;
}