Cod sursa(job #644258)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 5 decembrie 2011 22:26:48
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>

using namespace std;

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

const int N=500001;
int P;
const int D=525000;

int cont[525000],poz[525000];
int v[N],final[N],n;

void insert(int x){
	int hash,pozitie,val;
	val=v[x];
	hash=(v[x]/P);
	pozitie=poz[hash];
	poz[hash]++;
	final[poz[hash]]=v[x];
	while(final[pozitie]>v[x]){
		final[pozitie+1]=final[pozitie];
		pozitie--;
	}
	final[pozitie+1]=v[x];
}

int main(){
	int i,minim=1<<31,maxim=0;
	in>>n;
	for(i=1;i<=n;i++){
		in>>v[i];
		if(v[i]>maxim)
			maxim=v[i];
		if(v[i]<minim)
			minim=v[i];
	}
	P=(maxim-minim)/D + 1;
	for(i=1;i<=n;++i){
		cont[(v[i]/P)]++;
	}
	for(i=1;i<525000;++i){
		poz[i]=cont[i-1]+poz[i-1];
	}
	for(i=1;i<=n;++i){
		insert(i);
	}
	for(i=1;i<=n;++i){
		out<<final[i]<<" ";
	}
	return 0;
}