Cod sursa(job #1992057)

Utilizator PlatenitesVoicu Cristian Platenites Data 19 iunie 2017 12:02:26
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>

using namespace std;

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

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int *v, n, c[10];

void radix(int maxim)
{
	int pas = 1;
	int *nv = (int*)malloc((n+1)*sizeof(int));
	memset((int*)nv, 0, n * sizeof(int));
	while (maxim / pas > 0) {
		for (int i = 1; i <= n; i++) {
			c[(v[i] / pas) % 10] ++;
		}
		for (int i = 1; i <= 9; i++) {
			c[i] = c[i] + c[i - 1];
		}
		for (int i = n; i >= 1; i--) {
			int poz = (v[i] / pas) % 10;
			nv[c[poz]] = v[i];
			c[poz]--;
		}
		for (int i = 1; i <= n; i++)
			v[i] = nv[i];
		memset((int*)c, 0, 10 * sizeof(int));
		pas = pas * 10;
	}
}
int main()
{
	int maxim = -858993460;
	f >> n;
	v = (int *)malloc((n + 1) * sizeof(int));
	for (int i = 1; i <= n; i++) {
		f >> v[i];
		if (v[i] > maxim)
			maxim = v[i];
	}
	radix(maxim);
	for (int i = 1; i <= n; i++) {
		g << v[i] << " ";
	}
	return 0;
}