Pagini recente » Cod sursa (job #1279800) | Cod sursa (job #1279751) | Cod sursa (job #708139) | Cod sursa (job #1162429) | Cod sursa (job #1167020)
#include <iostream>
#include <cstring>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
const int digits = 4;
const int r = 8;
const int radix = 1 << r;
const int mask = radix - 1;
const int Nmax = 500002;
int a[Nmax];
int b[Nmax];
int bucket[radix];
int N;
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
f >> N;
for ( int i = 0; i < N; ++i )
f >> a[i];
for ( int i = 0, shift; i < digits; i++, shift += r )
{
for ( int j = 0; j < radix; ++j )
bucket[j] = 0;
for ( int j = 0; j < N; ++j )
++bucket[ ( a[j] >> shift ) & mask ];
for ( int j = 1; j < radix; ++j )
bucket[j] += bucket[j - 1];
for ( int j = N - 1; j >= 0; j-- )
b[ --bucket[ ( a[j] >> shift ) & mask ] ] = a[j];
for ( int j = 0; j < N; ++j )
a[j] = b[j];
}
for ( int i = 0; i < N; ++i )
g << a[i] << " ";
return 0;
}