Pagini recente » Cod sursa (job #1843826) | Cod sursa (job #562074) | Cod sursa (job #1578817) | Cod sursa (job #1315282) | Cod sursa (job #2611792)
#include <fstream>
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
const int NMAX = 10000000;
const int NB = 8;
const int BASE = (1<<NB);
const int NC = (32 + NB - 1) / NB;
int v[2][NMAX + 1];
int nr[BASE + 1];
int poz[BASE + 1];
int main() {
ios::sync_with_stdio(false);
int n, a, b, c;
fin>>n>>a>>b>>c;
v[0][1] = b;
for( int i = 2; i <= n; i ++ )
v[0][i] = (((long long)a * v[0][i-1]) + b) % c;
int m = BASE - 1;
for( int k = 0; k < NC; k ++ ) {
int l1 = k & 1;
int l2 = (k + 1) & 1;
int nb = k * NB;
for( int j = 0; j < BASE; j ++ )
nr[j] = 0;
for( int i = 1; i <= n; i ++ ) {
int cif = (v[l1][i]>>nb)&m;
nr[cif] ++;
}
poz[0] = 1;
for( int j = 1; j < BASE; j ++ ) {
poz[j] = poz[j - 1] + nr[j - 1];
}
for( int i = 1; i <= n; i ++ ) {
int cif = (v[l1][i]>>nb)&m;
v[l2][poz[cif] ++] = v[l1][i];
}
}
int l = NC & 1;
for( int i = 1; i <= n; i +=10 )
fout<<v[l][i]<<" ";
return 0;
}