Pagini recente » Cod sursa (job #1634462) | Cod sursa (job #2286881) | Cod sursa (job #2514782) | Cod sursa (job #563010) | Cod sursa (job #2609418)
#include <fstream>
#include <iostream>
using namespace std;
int v[10000000];
int aux[10000000];
void radix_sort(auto* sir_sort, auto* sir_aux, const int n) {
///nr de biti
const int NB = 16;
///baza numerelor pe care le sortam
const int B = 1 << NB;
int nr[B], poz[B];
//int p = 1;
for(int k = 0; k < n; ++k) {
int KNB = k*NB;
///resetez nr
for(int i = 0; i < B; ++i) {
nr[i] = 0;
}
for(int j = 0; j < n; ++j) {
++nr[(sir_sort[j]>>KNB)&(B-1)];
//++nr[sir_sort[j]/p%10];
}
///construiesc poz
poz[0] = 0;
for(int i = 1; i < B; ++i) {
poz[i] = poz[i-1] + nr[i-1];
}
for(int j = 0; j < n; ++j) {
sir_aux[poz[(sir_sort[j]>>KNB)&(B-1)]++] = sir_sort[j];
//sir_aux[poz[sir_sort[j]/p%10]++] = sir_sort[j];
}
for(int j = 0; j < n; ++j) {
sir_sort[j] = sir_aux[j];
}
//p *= 10;
}
}
void generare_nr(auto* sir_generare, int n, int a, int b, int c) {
sir_generare[0] = b;
for(int i = 1; i < n; ++i) {
sir_generare[i] = ((long long)a * sir_generare[i-1] + b) % c;
}
}
int main() {
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int n, a, b, c;
fin >> n >> a >> b >> c;
generare_nr(v, n, a, b, c);
radix_sort(v, aux, n);
for(int i = 0; i < n; i += 10) {
fout << v[i] << " ";
}
fin.close();
fout.close();
return 0;
}