Cod sursa(job #1312975)

Utilizator rzvrzvNicolescu Razvan rzvrzv Data 10 ianuarie 2015 11:02:20
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include<cstdio>

using namespace std;

struct nod
{
    int inf;
    nod *leg;
};

int v[1000002],n,div,i,j,k,x,nr[10];
nod *q;

void reinit(nod *p[10])
{
    nod *q,*aux;
    for(int i=0;i<=9;i++)
    {
        q=p[i];
        for(int j=1;j<=nr[i];j++)
        {
            if(q->leg!=NULL)
            aux=q->leg;
            delete q;
            q=aux;
        }
    }
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
    }
    div=1;
    nod *p[10],*u[10];
    for(i=0;i<=10;i++)
    {
        reinit(p);
        reinit(u);
        for(j=0;j<=9;j++)
        {
            p[j]=new nod;
            u[j]=new nod;
            nr[j]=0;
        }
        for(j=1;j<=n;j++)
        {
            q=new nod;
            x=(v[j]/div)%10;
            if(nr[x]==0)
            {
                p[x]->inf=v[j];
                p[x]->leg=NULL;
                u[x]=p[x];
                nr[x]=1;
            }
            else
            {
                q->inf=v[j];
                q->leg=NULL;
                u[x]->leg=q;
                u[x]=q;
                nr[x]++;
            }
        }
        v[0]=0;
        for(j=0;j<=9;j++)
        {
            q=p[j];
            for(k=1;k<=nr[j];k++)
            {
                v[++v[0]]=q->inf;
                q=q->leg;
            }
        }
    }
    for(i=1;i<=n;i++)
    {
        printf("%d ",v[i]);
    }
}