Pagini recente » Cod sursa (job #958186) | Cod sursa (job #2528504) | Cod sursa (job #424257) | Cod sursa (job #2583775) | Cod sursa (job #2614217)
#include <fstream>
#include <vector>
#include <algorithm>
#include <iomanip>
int n;
int main()
{
int a,b,c;
int *v = new int[10000000];
std::ifstream fin("radixsort.in");
std::ofstream fout("radixsort.out");
fin>>n>>a>>b>>c;
v[0]=b;
for(int i=1; i<n; i++)
{
v[i]=(a*v[i-1] + b) % c;
}
int m = v[0], exp=1;
for(int i=1; i<n; i++)
{
if(v[i]>m) m = v[i];
}
while(m>0)
{
int *rez = new int[10000000];
int H[10] = { };
for(int i=0; i<n; i++)
{
H[(v[i]/exp)%10]++;
}
for(int i=1; i<10; i++)
{
H[i]=H[i]+H[i-1];
}
for(int i=n-1; i>=0; i--)
{
rez[H[(v[i]/exp)%10] -1]=v[i];
H[(v[i]/exp)%10]--;
}
for(int i=0; i<n; i++)
{
v[i]=rez[i];
}
delete rez;
m=m/10;
exp=exp*10;
}
for(int i=0; i<n; i+=10)
{
fout<<v[i]<<' ';
}
fout<<'\n';
delete v;
return 0;
}