Pagini recente » Cod sursa (job #965246) | Cod sursa (job #289566) | Cod sursa (job #2649888) | Cod sursa (job #290787) | Cod sursa (job #476465)
Cod sursa(job #476465)
#include <fstream>
using namespace std;
int v[1<<19],d[1<<19],n,zece[10],a[10],b[10];
ifstream in("algsort.in");
ofstream out("algsort.out");
inline int cif(int x,int n)
{
return (x/zece[n])%10;
}
void radix(int p,int x,int y)
{
if (p==10 || x>=y)
return;
int i;
for (i=a[0]=b[0]=0;i<=9;i++)
a[i]=0;
for (i=x;i<=y;i++)
a[cif(v[i],p)]++;
for (i=1;i<=9;i++)
{
a[i]+=a[i-1];
b[i]=a[i];
}
for (i=x;i<=y;i++)
d[a[cif(v[i],p)]--]=v[i];
for (i=x;i<=y;i++)
v[i]=d[i];
for (i=0;i<9;i++)
radix(p+1,b[i],b[i+1]-1);
}
int main()
{
int i;
bool ok=true;
in>>n;
zece[1]=1;
for (i=2;i<10;i++)
zece[i]=zece[i-1]*10;
for (i=1;i<=n;i++)
{
in>>v[i];
if (v[i]<v[i-1])
ok=false;
}
if (!ok)
radix(1,1,n);
for (i=1;i<=n;i++)
out<<v[i]<<" ";
out<<"\n";
return 0;
}