Pagini recente » Cod sursa (job #98261) | Cod sursa (job #173938) | Cod sursa (job #2706713) | Cod sursa (job #2824970) | Cod sursa (job #659093)
Cod sursa(job #659093)
#include <algorithm>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
#define MOD (1<<8)-1
#define CANS 8
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
queue <int> bucket[MOD+5];
vector <int> v;
int N,max_val;
void read ()
{
fin>>N;
v.resize (N+5);
for (int i=1; i<=N; ++i)
{
fin>>v[i];
max_val=max (max_val,v[i]);
}
}
void radix ()
{
for (int bit=0; max_val; bit+=CANS, max_val>>=CANS)
{
for (int i=1; i<=N; ++i)
bucket[((v[i]>>bit)&MOD)].push (v[i]);
int newN=0;
for (int i=0; i<=MOD; ++i)
while (!bucket[i].empty ())
v[++newN]=bucket[i].front (), bucket[i].pop ();
}
}
void print ()
{
fout<<v[1]<<" ";
for (int i=2; i<=N; ++i)
{
fout<<v[i]<<" ";
if (v[i]<v[i-1])
printf ("MUIE %d",v[i]);
}
}
int main ()
{
read ();
radix ();
print ();
return 0;
}