Cod sursa(job #551544)
#include <fstream>
#include <string.h>
using namespace std;
int i,N;
int v[500001],x[500001];
inline void radix(int byte,int a[],int b[])
{
int count[32];
int index[32];
int i;
memset(count,0,sizeof(count));
memset(index,0,sizeof(index));
for(i=0;i<N;i++) count[(a[i]&(31<<(byte*4)))>>(byte*4)]++;
index[0]=0;
for(i=1;i<32;i++) index[i]=index[i-1]+count[i-1];
for(i=0;i<N;i++) b[index[(a[i]&(31<<(byte*4)))>>(byte*4)]++]=a[i];
}
int main()
{
ifstream in("algsort.in");
ofstream out("algsort.out");
in>>N;
for(i=0;i<N;i++) in>>v[i];
radix(0,v,x);
radix(1,x,v);
radix(2,v,x);
radix(3,x,v);
radix(4,v,x);
radix(5,x,v);
radix(6,v,x);
radix(7,x,v);
for(i=0;i<N-1;i++) out<<v[i]<<' ';
out<<v[N-1]<<'\n';
return 0;
}