Cod sursa(job #1389129)

Utilizator alexandru70Ungurianu Alexandru alexandru70 Data 16 martie 2015 00:40:30
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#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 = 256)
{
    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 << ' ';
	}
}