Pagini recente » Cod sursa (job #2343800) | Cod sursa (job #2745749) | Cod sursa (job #1647858) | Cod sursa (job #2551479) | Cod sursa (job #1333470)
#include <stdint.h>
#include <limits>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
const int MAX_ELEMENTS = 500010;
uint32_t A, B, C;
int N;
const uint32_t digits = 4;//Digits
const uint32_t r = 8;//Bits
const uint32_t radix = 1 << r; //Buckets
const uint32_t mask = radix - 1; //BitMaksk
void read(vector<uint32_t>& data)
{
ifstream f("radixsort.in");
f >> N >> A >> B >> C;
data.push_back(B);
for (int i = 1; i < N; i++){
data.push_back((A*data[i - 1] + B) % C);
}
f.close();
}
void write(const vector<uint32_t>& data)
{
ofstream g("radixsort.out");
for (int i = 1; i < N; i = i + 10){
g << data[i] << " ";
}
g << endl;
}
void radixSort(vector<uint32_t>& data){
const int SIZE = data.size();
vector<uint32_t> b(SIZE);
vector<uint32_t> bucket(radix);
uint32_t shift = 0;
for (uint32_t i = 0; i < digits; i++){
for (uint32_t j = 0; j < radix; j++){
bucket[j] = 0;
}
for (int j = 0; j < SIZE; j++){
bucket[(data[j] >> shift) & mask]++;
}
for (uint32_t j = 1; j < radix; j++){
bucket[j] += bucket[j - 1];
}
for (int j = SIZE - 1; j >= 0; --j){
b[--bucket[(data[j] >> shift) & mask]] = data[j];
}
shift += r;
data = b;
}
}
int main(){
vector<uint32_t> data;
read(data);
radixSort(data);
write(data);
}