Pagini recente » Cod sursa (job #661692) | Monitorul de evaluare | Cod sursa (job #371650) | Cod sursa (job #740817) | Cod sursa (job #2271317)
#include<fstream>
#include<iostream>
using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
int i,n,a,b,c,v[1000000],x,y,j,aux;
int gasestemaxi(int v[], int n)
{
int maxi=v[1];
//caut in vector valoarea cea mai mare pentru a afla nr maxim de cifre pe care le are un numar
for(i=2; i<=n; i++)
if(v[i]>maxi)
maxi=v[i];
//returnez valoarea maxima
return maxi;
}
//creez un subprogram sortare cu 3 parametri pentru a sorta de fiecare data vectorul care memoreaza numerele care se termina cu
//cifrele de la 0 la 9
void sortare(int v[], int n, int exponent)
{
int vectorfinal[n+5]; //vectorul care imi va returna la final numerele sortate
int i;
int cifre[10]= {0}; // initilizez vectorul de cifre cu 0 pe toate cele 10 pozitii
for(i=1; i<=n; i++)
cifre[(v[i]/exponent)%10]++; //cresc pozitia
for(i=1; i<=9; i++)
cifre[i]+=cifre[i-1];
for(i=n; i>=1; i--)
{
vectorfinal[cifre[(v[i]/exponent)%10]]=v[i];
cifre[(v[i]/exponent)%10]--;
}
for(i=1; i<=n; i++)
//suprascriu in vectorul meu initial rezultatul vectorului final
v[i]=vectorfinal[i];
}
void radixsort(int v[], int n)
{
int m, exponent;
m=gasestemaxi(v,n);
for(exponent=1; m/exponent>0; exponent=exponent*10)
sortare(v,n,exponent);
}
int main()
{
f>>n>>a>>b>>c;
v[1]=b;
for(i=2; i<=n; i++)
v[i]=(a*v[i-1]+b)%c;
radixsort(v,n);
for(i=1; i<=n; i++)
if(i%10==1)
g<<v[i]<<" ";
return 0;
}