Pagini recente » Cod sursa (job #2141605) | Cod sursa (job #2998415) | Cod sursa (job #2498582) | Cod sursa (job #2759116) | Cod sursa (job #659089)
Cod sursa(job #659089)
#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 ()
{
for (int i=1; i<=N; ++i)
fout<<v[i]<<" ";
}
int main ()
{
read ();
radix ();
print ();
return 0;
}