Pagini recente » Cod sursa (job #1145305) | Cod sursa (job #3124355) | Cod sursa (job #1808329) | Cod sursa (job #1390708) | Cod sursa (job #381325)
Cod sursa(job #381325)
# 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;
}