Pagini recente » Cod sursa (job #2492445) | Cod sursa (job #502488) | Cod sursa (job #388850) | Cod sursa (job #1772960) | Cod sursa (job #491179)
Cod sursa(job #491179)
#include <fstream>
using namespace std;
int v[1<<19],aux[1<<19],zece[1<<4],a[1<<4],n;
ifstream in("algsort.in");
ofstream out("algsort.out");
inline int cif(int x,int n)
{
return x/zece[n]%10;
}
void radix(int x,int y,int p)
{
int i,b[1<<4];
for (i=0;i<10;i++)
a[i]=0;
a[0]=b[0]=x;
b[10]=y-x+1;
for (i=x;i<y;i++)
a[cif(v[i],p)+1]++;
for (i=1;i<10;i++)
{
a[i]+=a[i-1];
b[i]=a[i];
}
for (i=x;i<y;i++)
aux[a[cif(v[i],p)]++]=v[i];
for (i=x;i<y;i++)
v[i]=aux[i];
if (p==1)
return;
for (i=0;i<10;i++)
if (b[i+1]-b[i]>1)
radix(b[i],b[i+1],p-1);
}
int main()
{
int i;
zece[1]=1;
for (i=2;i<11;i++)
zece[i]=zece[i-1]*10;
in>>n;
for (i=1;i<=n;i++)
in>>v[i];
radix(1,n+1,10);
for (i=1;i<=n;i++)
out<<v[i]<<"\n";
out<<"\n";
return 0;
}