Cod sursa(job #976119)

Utilizator Daniel3717Aleca Daniel Adrian Daniel3717 Data 22 iulie 2013 16:32:18
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 2.53 kb
#include <iostream>
#include <fstream>
using namespace std;
struct nod
{
    int inf;
    nod *urm;
} *q,*prim,*primp,*p[10],*pp,*ultim,*ultimp;
int x,n,i,nr,c,b;
void create()
{
    primp=new(nod);
    ultimp=new(nod);

    p[0]=new(nod);
    p[1]=new(nod);
    p[2]=new(nod);
    p[3]=new(nod);
    p[4]=new(nod);
    p[5]=new(nod);
    p[6]=new(nod);
    p[7]=new(nod);
    p[8]=new(nod);
    p[9]=new(nod);

    primp->inf=-10;
    primp->urm=p[0];

    p[0]->inf=0;
    p[0]->urm=p[1];

    p[1]->inf=-1;
    p[1]->urm=p[2];

    p[2]->inf=-2;
    p[2]->urm=p[3];

    p[3]->inf=-3;
    p[3]->urm=p[4];

    p[4]->inf=-4;
    p[4]->urm=p[5];

    p[5]->inf=-5;
    p[5]->urm=p[6];

    p[6]->inf=-6;
    p[6]->urm=p[7];

    p[7]->inf=-7;
    p[7]->urm=p[8];

    p[8]->inf=-8;
    p[8]->urm=p[9];

    p[9]->inf=-9;
    p[9]->urm=ultimp;

    ultimp->urm=NULL;
    ultimp->inf=-11;
}
int main(void)
{
    FILE * f;
    f=fopen("algsort.in","r");
    ofstream g("algsort.out");
    fscanf(f,"%d",&n);

    create();
    x=1;

    for (i=1;i<=n;i++)
    {
        fscanf(f,"%d",&nr);
        c=nr%10;

        pp=new(nod);

        pp->inf=nr;
        pp->urm=p[c]->urm;
        p[c]->urm=pp;
        p[c]=pp;

    }

    b=0;
    while (b==0)
    {
        x=x*10;
        b=1;
        prim=primp;
        ultim=ultimp;

        create();

        q=prim->urm;
        delete(prim);

        while (q!=ultim)
        {
            while ((q->inf<=0)&&(q->inf>-10))
            {
                prim=q;
                q=q->urm;
                delete(prim);
            }
            if (q!=ultim)
            {
                nr=q->inf;
                c=(nr/x)%10;

                if ((b==1)&&(c!=0))
                    b=0;

                pp=new(nod);

                pp->inf=nr;
                pp->urm=p[c]->urm;
                p[c]->urm=pp;
                p[c]=pp;

                prim=q;
                q=q->urm;
                delete(prim);
            }
        }

        delete(q);
    }
    prim=primp;
    ultim=ultimp;

    q=prim->urm;
    delete(prim);
    while (q!=ultim)
    {
        while ((q->inf<=0)&&(q->inf>-10))
        {
            prim=q;
            q=q->urm;
            delete(prim);
        }
        if (q!=ultim)
        {
            g<<q->inf<<' ';
            prim=q;
            q=q->urm;
            delete(prim);
        }
    }
    delete(q);

    g.close();
    return 0;

}