Cod sursa(job #1459946)

Utilizator adi_ispas95FMI - Adrian Ispas adi_ispas95 Data 11 iulie 2015 12:50:45
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;

void CountingSort(int *a, int n, int exp){

	int *c = new int[10];
	int *b = new int[n];

	for (int i = 0; i < 10; i++)
		c[i] = 0;

	for (int i = 0; i < n; i++)
		c[(a[i] / exp) % 10]++;

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

	for (int i = n - 1; i >= 0; i--){
		b[c[(a[i] / exp) % 10] - 1] = a[i];
		c[(a[i] / exp) % 10]--;
	}

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

	delete[] b;
	delete[] c;
}

void RadixSort(int *a, int n, int max_n){
	
	for (int exp = 1; max_n / exp > 0; exp *= 10)
		CountingSort(a, n, exp);

}

int main(){

	ifstream in("algsort.in");
	ofstream out("algsort.out");

	int n, max_number = 0;
	
	in >> n;

	int *a = new int[n];

	for (int i = 0; i < n; i++){
		in >> a[i];

		if (max_number < a[i])
			max_number = a[i];
	}

	RadixSort(a, n, max_number);

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

	delete[] a;
	return 0;
}