Pagini recente » Cod sursa (job #1247575) | Cod sursa (job #1328221) | Cod sursa (job #2481534) | Cod sursa (job #1323647) | Cod sursa (job #662898)
Cod sursa(job #662898)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int v[500010],A[500010];
void ordoneaza_dupa_cifra_k(int v[],int n,int k)
{
int i,aux[10]={0};
int nou[100];
int taie=pow(10,k-1);
for(i=0;i<n;i++)
aux[(v[i]/taie)%10]++;
for(i=1;i<=9;i++)
aux[i]+=aux[i-1];
for(i=n-1;i>=0;i--)
{
nou[aux[(v[i]/taie)%10]-1]=v[i];
aux[(v[i]/taie)%10]--;
}
for(i=0;i<n;i++)
v[i]=nou[i];
}
int main()
{
FILE *f=fopen("algsort.in","rt");
FILE *g=fopen("algsort.out","wt");
int n,i,j,nrmax=0,nrcif;
fscanf(f,"%i",&n);
for(i=0;i<n;i++)
{
nrcif=0;
fscanf(f,"%i",&v[i]);
j=v[i];
while(j)
{
nrcif++;
j/=10;
}
if(nrcif>nrmax)
nrmax=nrcif;
}
for(i=1;i<=nrmax;i++)
ordoneaza_dupa_cifra_k(v,n,i);
for(i=0;i<n;i++)
fprintf(g,"%i ",v[i]);
return 0;
}