Pagini recente » Cod sursa (job #1113199) | Cod sursa (job #3082) | Istoria paginii utilizator/bizar | Cod sursa (job #2284250) | Cod sursa (job #662146)
Cod sursa(job #662146)
#include<stdio.h>
#include<vector>
#define Nmax 500002
using namespace std;
FILE *c,*d;
int a[Nmax],n,cifre_max;
int nr_cifre(int x)
{
int k=0;
while(x!=0)
{
k++;
x=x/10;
}
return k;
}
void read()
{
int i,t;
cifre_max=0;
fscanf(c,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(c,"%d",&a[i]);
t=nr_cifre(a[i]);
if(t>cifre_max)
cifre_max=t;
}
}
int cifra_k(int k,int x)
{
int i,digit; // returneaza a k a cifra din numarul x
for(i=1;i<=k;i++)
{
digit=x%10;
x=x/10;
}
return digit;
}
void lsd_radix()
{
int i,j,t,k,l,y;
for(i=1;i<=cifre_max;i++)
{
vector <int> v[10];
for(j=1;j<=n;j++)
{
t=cifra_k(i,a[j]);
v[t].push_back(a[j]);
}
y=0;
for(k=0;k<=9;k++)
for(l=0;l<v[k].size();l++)
{
y++;
a[y]=v[k][l];
}
}
}
void write()
{
int i;
for(i=1;i<=n;i++)
fprintf(d,"%d ",a[i]);
}
int main()
{
c=fopen("algsort.in","r");
d=fopen("algsort.out","w");
read();
lsd_radix();
write();
fclose(c);
fclose(d);
return 0;
}