Cod sursa(job #551459)
#include <fstream>
#include <string.h>
using namespace std;
int i,N;
int v[500001],x[500001];
inline void radix()
{
int end,b,size,i;
b=0;
end=0;
while(!end)
{
end=1;
size=0;
memset(x,0,sizeof(x));
for(i=1;i<=N;i++)
if(!(v[i]&(1<<b)))
{
x[++size]=v[i];
v[i]=-1;
}
else
if((v[i])&(1<<(b+1))) end=0;
for(i=1;i<=N;i++)
{
if(v[i]!=-1) x[++size]=v[i];
v[i]=x[i];
}
b++;
}
}
int main()
{
ifstream in("algsort.in");
ofstream out("algsort.out");
in>>N;
for(i=1;i<=N;i++) in>>v[i];
radix();
for(i=1;i<N;i++) out<<v[i]<<' ';
out<<v[N]<<'\n';
return 0;
}