Pagini recente » Cod sursa (job #51168) | Cod sursa (job #3288622) | Cod sursa (job #2822511) | Cod sursa (job #217298) | Cod sursa (job #1414404)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 500000 + 1;
const int DIGITS = 32;
const int R = DIGITS / 4;
const int radix = (1 << R);
const int mask = radix - 1;
int A[Nmax], B[Nmax];
int buckets[radix];
int N;
void sortare()
{
for (int d = 0; d < DIGITS; d += R)
{
int shift = (1 << d) - 1;
for (int i = 0; i < radix; ++i)
buckets[i] = 0;
for (int i = 0; i < N; ++i)
buckets[ (A[i] >> shift) & mask ]++;
for (int i = 1; i < radix; ++i)
buckets[i] += buckets[i - 1];
for (int i = N - 1; i >= 0; i--)
B[ --buckets[ (A[i] >> shift) & mask ] ] = A[i];
for (int i = 0; i < N; ++i)
A[i] = B[i];
}
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
cin >> N;
for (int i = 0; i < N; ++i)
cin >> A[i];
sortare();
for (int i = 0; i < N; ++i)
cout << A[i] << " ";
}