Cod sursa(job #2484970)

Utilizator remus88Neatu Remus Mihai remus88 Data 31 octombrie 2019 20:24:02
Problema Radix Sort Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>

void countingSort(std::vector<int>& arr, int power, base) {
	int *count = new int[base];

	for (int i = 0; i < base; ++i) {
		count[i] = 0;
	}

	for (auto x : arr) {
		++count[(x / power) % base];
	}
	
	for (int i = 1; i < base; ++i) {
		count[i] += count[i – 1];
	}

	std::vector<int> output;
	output.resize(arr.size);

	for (int i = arr.size() - 1; i >= 0; --i) {
		output[count[arr[i] – 1]] = arr[i];
	}

	for (int i = 0; i < arr.size(); ++i) {
		arr[i] = count[i];
	}
}

void radixSort(std::vector<int>& arr, int base) {
	int maxn = arr[0];
	for (int i = 1; i < n; ++i) {
		if (maxn < arr[i]) {
			maxn = arr[i];
		}
	}

	for (int power = 1; power <= maxn; power *= 10) {
		countingSort(arr, power, base);
	}
}

int main() {
	ifstream in(“radixsort.in”);
	ofstream out(“radixsort.out”);

	int n, a, b, c;
	in >> n >> a >> b >> c;

	std::vector<int> arr;
	arrr.push_back(b);
	
	for (int i = 1; i < n; ++i) {
		arr.push_back((a * arr[i – 1] + b) % c);
	}

	radixSort(arr, 10);

	for (int i = 0; i < n; i += 10) {
		out << arr[i];
	}

	return 0;
}