Cod sursa(job #381065)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 8 ianuarie 2010 18:29:34
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include<cstdio>
#include<stdlib.h>

using namespace std;

struct nod
{
        int inf;
        nod *urm;
} *prim[10], *ultim[10], *qp, *qu;

int n, i ,nc, cifc, ok, val;
        
void push(nod *&prim, nod *&ultim, int val)
{
    nod *p;
    
    p = new nod;
    p -> inf = val;
    p -> urm = NULL;
    
    if (prim == NULL) prim = ultim = p;
    else
    {
        ultim -> urm = p;
        ultim = p;
    }
}

int pop(nod *&prim, nod *&ultim)
{
    int rez;
    nod *p;
    
    rez = prim -> inf;
    p = prim;
    prim = prim -> urm;
    delete(p);
    
    return rez;
}

int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    
    scanf("%d",&n);
    for (i = 1; i <= n; ++i)
    {
        scanf("%d", &val);
        push(qp, qu, val);
    }
       
    nc = 10; ok = 1;
    while (ok)
    {
          ok = 0;
          while (qp != NULL)
          {
              val = pop(qp, qu);
              cifc=(val % nc - val % (nc / 10)) / (nc / 10);
              if (cifc) ok = 1;
              push(prim[cifc], ultim[cifc], val);
          }
          nc *= 10;
          for (i = 0; i <= 9; ++i)
             while (prim[i]!=NULL) push(qp, qu, pop(prim[i], ultim[i]));
    }
      
    while (qp != NULL) printf("%d ", pop(qp, qu));
             
    return 0;
}