Cod sursa(job #1010005)

Utilizator tudorv96Tudor Varan tudorv96 Data 14 octombrie 2013 09:36:46
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

using namespace std;

const int N = 5e5 + 5;

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

int n, v[N], w[N], c[10], MAX = -1;
char last[N];

void Sort(bool ok) { //Sortez dupa a lg(zec) cifra
	int aux[N], vv[N];
	for (int i = 1; i <= n; ++i) {
		if (ok)
			aux[i] = v[i];
		else
			aux[i] = w[i];
		vv[i] = v[i];
	}
	for (int i = 1; i <= n; ++i)
		last[i] = vv[i] % 10;
	for (int i = 0; i <= 9; ++i)
		c[i] = 0;
	for (int i = 1; i <= n; ++i) 
		c[(int)last[i]]++;
	for (int i = 1; i <= 9; ++i)
		c[i] += c[i-1];
	for (int i = n; i; --i) {
		w[c[(int)last[i]]] = aux[i];
		v[c[(int)last[i]]] = vv[i];
		c[(int)last[i]]--;
	}
}

int main() {
	fin >> n;
	for (int i = 1; i <= n; ++i) {
		fin >> v[i];
		MAX = max (v[i], MAX);
	}
	for (int i = 0; MAX; ++i) {
		Sort (!i);
		MAX /= 10;
		for (int i = 1; i <= n; ++i)
			v[i] /= 10;
	}
	for (int i = 1; i <= n; ++i)
		fout << w[i] << " ";
}