Pagini recente » Cod sursa (job #1446307) | Cod sursa (job #51739) | Cod sursa (job #3293299) | Cod sursa (job #683872) | Cod sursa (job #1496018)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("radixsort.in");
ofstream gout("radixsort.out");
#define maxN 1000001
int v[maxN];
void countsort(int v[],int n,int exp)
{
int counts[10]={0},*output;
output = new int[n];
for(int i=0;i<n;++i)
counts[v[i]/exp%10]++;
for(int i=1;i<10;++i)
counts[i]+=counts[i-1];
//making the output
for(int i=n-1;i>=0;--i){
output[ counts[v[i]/exp%10] - 1] = v[i];
counts[v[i]/exp%10]--;
}
for(int i=0;i<n;++i)
v[i] = output[i];
}
int getMax(int v[],int n)
{
int maxValue = v[0];
for(int i=1;i<n;++i)
if(maxValue < v[i])
maxValue = v[i];
return maxValue;
}
void radixsort(int v[],int n)
{
int maxValue = getMax(v,n);
for(int exp=1; maxValue/exp!=0; exp*=10)
countsort(v,n,exp);
}
int main()
{
int n,a,b,c;
fin>>n>>a>>b>>c;
v[0] = b%c;
for(int i=1;i<n;++i)
v[i] = (a*v[i-1]%c+b)%c;
radixsort(v,n);
for(int i=0;i<n;i+=10)
gout<<v[i]<<" ";
return 0;
}