Pagini recente » Cod sursa (job #3274968) | Cod sursa (job #890159) | Cod sursa (job #1627379) | Cod sursa (job #247734) | Cod sursa (job #978888)
Cod sursa(job #978888)
#include <cstdio>
#include <queue>
#define NMax 500001
#define Bits 8
using namespace std;
queue <long> Buckets[1<<Bits];
long V[NMax], N, Max, S=1<<Bits;
void RadixSort()
{
for (long i=0; Max; Max>>=Bits, i+=Bits)
{
for (long j=1; j<=N; ++j)
{
int Place=((V[j]>>i)&255);
Buckets[Place].push(V[j]);
}
long aux=0;
for (long j=0; j<=255; ++j)
{
while (!Buckets[j].empty())
{
V[++aux]=Buckets[j].front();
Buckets[j].pop();
}
}
}
}
void Read ()
{
freopen ("algsort.in", "r", stdin);
scanf ("%ld", &N);
for (long i=1; i<=N; ++i)
{
scanf ("%ld", &V[i]);
if (V[i]>Max)
{
Max=V[i];
}
}
}
void Print ()
{
freopen ("algsort.out", "w", stdout);
for (long i=1; i<=N; ++i)
{
printf ("%ld ", V[i]);
}
}
int main ()
{
Read ();
RadixSort ();
Print ();
return 0;
}