Pagini recente » Cod sursa (job #235183) | Cod sursa (job #2150628) | Cod sursa (job #2403513) | Cod sursa (job #2632819) | Cod sursa (job #2622733)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
void counting(long long a[], int times, long long ma, long long n)
{
long long nr[10]={0};
long long result[n+1];
for(long long i=0;i<n;i++)
{ int cifra=(a[i]/times)%10;
nr[cifra]++;
}
for(long long i=1;i<n;i++)
nr[i]+=nr[i-1];
for(long long i=n-1;i>=0;i--)
{
int cifra=(a[i]/times)%10;
result[nr[cifra]-1]=a[i];
nr[cifra]--;
}
for(int i=0;i<n;i++)
a[i]=result[i];
}
void radixsort(long long a[], long long n)
{
long long ma=-1;
for(long long i=0;i<n;i++)
if(ma<a[i])ma=a[i];
int times=1;
while(ma/times>0)
{
counting(a,times,ma,n);
times*=10;
}
}
int main()
{
long long N,A,B,C;
in>>N>>A>>B>>C;
long long a[N+1];
a[0]=B;
for(long long i=1;i<N;i++)
a[i]=(A*a[i-1]+B)%C;
for(long long i=0;i<N;i++)
cout<<a[i]<<" ";
radixsort(a,N);
for(long long i=0;i<N;i+=10)
out<<a[i]<<" ";
return 0;
}