Cod sursa(job #2669156)

Utilizator HannaLieb Hanna Hanna Data 6 noiembrie 2020 11:44:17
Problema Radix Sort Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;

void Beolvas(int& n, int a[])
{
	ifstream fin("radixsort.in");

	int x, y, z;
	fin >> n >> x >> y >> z;
	a[0] = y;
	for (int i = 1; i < n; ++i)
		a[i] = (x * a[i - 1] + y) % z;
}

void Kiir(int n, int a[])
{
	ofstream fout("radixsort.out");

	for (int i = 0; i < n; ++i)
		if (i % 10 == 0) fout << a[i] << " ";

	fout << "\n";
}

void nullaz(int v[], int n)
{
	for (int i = 0; i < n; ++i) v[i] = 0;
}

void Radix_sort(int n,int a[])
{
	bool ok;
	int oszto = 1;
	int elof[11] = { 0 };
	int a2[1000] = { 0 };

	do
	{
		ok = false;

		for (int i = 0; i < n; ++i)
			++elof[(a[i]/oszto)%10+1];

		for (int i = 1; i <= 10; ++i)
			elof[i] += elof[i - 1];

		for (int i = 0; i < n; ++i)
		{
			if ((a[i] / oszto) / 10 > 0) ok = true;

			a2[elof[(a[i] / oszto) % 10]] = a[i];
			++elof[(a[i] / oszto) % 10];
		}

		for (int i = 0; i < n; ++i) a[i] = a2[i];

		oszto *= 10;
		nullaz(elof, 11);
	} while (ok);

}

int main()
{
	int n, a[1000] = { 0 };

	Beolvas(n, a);

	Radix_sort(n, a);

	Kiir(n, a);
	
	return 0;
}