Cod sursa(job #1827624)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 12 decembrie 2016 00:56:12
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#define MaxN 500005
#define MaxD 10000
using namespace std;

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


int fr[MaxD],v[MaxN],aux[MaxN],N,Max=0,Log;
void Sort()
{
	int Div=1,Size=1;
	Log=0;
	while(Size<Max)
		Log++,Size*=MaxD;//ma uit sa vad de cate ori trebuie sa fac o operatie
	for(int i=1;i<=Log;i++)
	{
		for(int i=0;i<MaxD;i++)
			fr[i]=0;
		for(int i=1;i<=N;i++)
			fr[(v[i]/Div)%MaxD]++;
		for(int i=1;i<MaxD;i++)
			fr[i]+=fr[i-1];
		for(int i=N;i>0;i--)
		{
			aux[fr[(v[i]/Div)%MaxD]]=v[i];
			fr[(v[i]/Div)%MaxD]--;
		}
		for(int i=1;i<=N;i++)
			v[i]=aux[i];
		Div*=MaxD;
	}

}
int main()
{
	cin>>N;
	for(int i=1;i<=N;i++)
	{
		cin>>v[i];
		if(Max<v[i])
			Max=v[i];
	}
	Sort();
	for(int i=1;i<=N;i++)
		cout<<v[i]<<" ";
	return 0;
}