Pagini recente » Cod sursa (job #877790) | Cod sursa (job #1619715) | Cod sursa (job #115923) | Cod sursa (job #1810332) | Cod sursa (job #381319)
Cod sursa(job #381319)
# include <cstdio>
# 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()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
bz = 30;
scanf("%d", &n);
for (i = 1; i <= n; ++i)
{
scanf("%d", &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) printf("%d ", pop(qp, qu));
return 0;
}