Pagini recente » Cod sursa (job #772983) | Cod sursa (job #694788) | Cod sursa (job #231821) | Cod sursa (job #2522585) | Cod sursa (job #2918693)
#include <fstream>
#include <deque>
#include <vector>
using namespace std;
int bucket[256];
int n;
unsigned long long a, b, c;
ifstream fin;
ofstream fout;
int v[10000010];
int temp[10000010];
void rsort(int v_in[], int v_out[], int n, int byte, int initial=0){
int count[256];
int index[256];
int i;
for(i = 0; i < 256; ++i){
count[i] = 0;
}
if(initial)
v_in[0] = b;
for(i = 0; i < n; ++i){
count[(v_in[i]>>(8*byte))&0x000000ff]++;
if(initial)
v_in[i+1] = (a * v_in[i] + b) % c;
}
index[0] = 0;
for(i = 1; i < 256; ++i){
index[i] = index[i - 1] + count[i - 1];
}
for(i = 0; i < n; ++i){
v_out[index[(v_in[i]>>(8*byte))&0x000000ff]++] = v_in[i];
}
}
int main(){
fin.open("radixsort.in");
fout.open("radixsort.out");
fin >> n >> a >> b >> c;
rsort(v, temp, n, 0, 1);
rsort(temp, v, n, 1);
rsort(v, temp, n, 2);
rsort(temp, v, n, 3);
for(int i=0; i<n; i = i + 10)
fout << v[i] << " ";
}