Pagini recente » Cod sursa (job #2200019) | Cod sursa (job #1306021) | Cod sursa (job #2193136) | Cod sursa (job #143814) | Cod sursa (job #1389128)
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>
#include <iostream>
#include <list>
using namespace std;
void radix_sort(list<unsigned> & data, size_t max = numeric_limits<unsigned>::max(), size_t base = 10)
{
list<unsigned> buckets[base];
for(size_t b = 1; b < max; b *= base)
{
for(auto i = data.begin(); i != data.end();)
{
auto cur = i++;
list<unsigned>& bucket = buckets[*cur / b % base];
bucket.splice(bucket.end(), data, cur);
}
for(list<unsigned>& bucket : buckets)
data.splice(data.end(), bucket);
}
}
int main() {
ifstream in("radixsort.in");
unsigned n,a,b,c;
in >> n >> a >> b >> c;
list<unsigned> data;
data.push_back(b);
for(size_t i = 1; i < n; ++i) {
data.push_back((a*data.back() + b)%c);
}
radix_sort(data);
ofstream out("radixsort.out");
for(auto it = data.begin(); it != data.end(); advance(it,10)) {
out << *it << ' ';
}
}