Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2797532) | Cod sursa (job #3141572) | Cod sursa (job #2220461)
#include <fstream>
using namespace std;
void general(int n, long long A, int B, int C, int v[])
{
v[0] = B;
for(int i=1; i<n; i++)
v[i] = (A*v[i-1]+B)%C;
}
void lada_rendezes(int forras[], int cel[], int n, int poz)
{
int elemszam[1<<8] = {0};
for(int i=0; i<n; i++)
elemszam[(forras[i]>>(poz*8))&255]++;
int osszegek[1<<8];
osszegek[0] = 0;
for(int i=1; i<256; i++)
osszegek[i] = osszegek[i-1]+elemszam[i-1];
int h[1<<8] = {0};
for(int i=0; i<n; i++)
{
int csoport = (forras[i]>>(poz*8))&255;
cel[osszegek[csoport]+h[csoport]] = forras[i];
h[csoport]++;
}
}
void rendez(int n, int v[])
{
int *tomb = new int[n];
lada_rendezes(v, tomb, n, 0);
lada_rendezes(tomb, v, n, 1);
lada_rendezes(v, tomb, n, 2);
lada_rendezes(tomb, v, n, 3);
delete []tomb;
}
void kiir(int n, int v[], ofstream &out)
{
for(int i=0; i<n; i+=10)
out << v[i] << ' ';
out << '\n';
}
int main()
{
ifstream in("radixsort.in");
ofstream out("radixsort.out");
int n, A, B, C;
in >> n;
int *v = new int[n];
in >> A >> B >> C;
general(n,A,B,C,v);
rendez(n,v);
kiir(n,v,out);
return 0;
}