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