Cod sursa(job #381325)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 10 ianuarie 2010 13:19:38
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 2.13 kb
# include <cstdio>
# include <fstream>
# include <iostream>
# include <stdlib.h>

using namespace std;

# define baza 31

using namespace std;

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

int n, i ,nc, cifc, val, bz, valmax, ind, step;
        
        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 = ultim -> urm;
             }
        }

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

         int main()
         {
             ifstream f("algsort.in");
             ofstream g("algsort.out");
    
             bz = 30;
             f >> n;
             for (i = 1; i <= n; ++i)
             {
                 f >> val;
                 push(qp, qu, val);
                 if (i == 1) valmax = val;
                 else if (val > valmax) valmax = val;
             }
             
             while (valmax)
             {
                   ++ind;
                   valmax /= bz;
             }
       
             nc = 1;
             for (step = 1; step <= ind; ++step)
             {
                   while (qp != NULL)
                   {
                         val = pop(qp, qu);
                         //cifc=(val % nc - val % (nc / bz)) / (nc / bz);
                         cifc = (val / nc) % bz;
                         push(prim[cifc], ultim[cifc], val);
                   }
                   nc *= bz;
                   for (i = 0; i < bz; ++i)
                       while (prim[i]!=NULL) push(qp, qu, pop(prim[i], ultim[i]));
             }
      
             while (qp != NULL) g << pop(qp, qu) << " ";
             
             return 0;
      }