Pagini recente » Cod sursa (job #2096071) | Cod sursa (job #3256342) | Cod sursa (job #344815) | Cod sursa (job #2573459) | Cod sursa (job #1259493)
#include<fstream>
using namespace std;
unsigned int *v;
struct Nod
{
unsigned int val;
Nod *pre, *urm;
};
void push(Nod *&l, unsigned int val)
{
Nod *cl = new Nod;
if(l == NULL)
{
cl->urm = NULL;
cl->pre = NULL;
cl->val = val;
l = cl;
}
else
{
cl->urm = l;
cl->pre = NULL;
cl->val = val;
l->pre = cl;
l = l->pre;
}
}
unsigned int pop(Nod *&l)
{
unsigned int rez = l->val;
if(l->pre == NULL)
{
delete l;
l = NULL;
}
else
{
l = l->pre;
delete l->urm;
l->urm = NULL;
}
return rez;
}
int main()
{
Nod *cif[10] = {NULL}, *cifi[10] = {NULL};
unsigned int n, a, b, c, i, mod=10, div=1, k;
fstream in("radixsort.in", fstream::in);
fstream out("radixsort.out", fstream::out);
in>>n>>a>>b>>c;
in.close();
v = new unsigned int[n+1];
v[0] = v[1] = b;
for(i = 2; i <= n; i++)
{
v[i] = (a*v[i-1] + b)%c;
if(v[i] > v[0])
v[0] = v[i];
}
while(v[0])
{
k = 1;
for(i=1; i<=n; i++)
if(cif[v[i]%mod/div] == NULL)
{
push(cifi[v[i]%mod/div], v[i]);
cif[v[i]%mod/div] = cifi[v[i]%mod/div];
}
else
push(cif[v[i]%mod/div], v[i]);
for(i = 0; i<=9; i++)
{
while(cifi[i] != NULL)
v[k++] = pop(cifi[i]);
cif[i] = NULL;
}
mod *=10;
div *=10;
v[0] /=10;
}
for(i=1; i<=n; i+=10)
out<<v[i]<<' ';
out.close();
}