Cod sursa(job #395548)

Utilizator lucianvnDragomir Lucian lucianvn Data 13 februarie 2010 13:54:53
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream.h>
ifstream intrare("algsort.in");
ofstream iesire("algsort.out");
int v[500001],n;
void citire()
{
	intrare>>n;
	for(int i=1;i<=n;i++)
		intrare>>v[i];
}
void swap(int &a,int &b)
{
	int t=b;
	b=a;
	a=t;
}
int minim(int a, int b)
{
	if(a>b) return b;
	return a;
}
int mijloc(int a, int b)
{
	int y;
	y=(a+b)/2;
	if(minim(a,b)==a)
		return minim(y,b);
	return minim(y,a);
}	
void quicksort(int left,int right)
{
	if(left<right)
	{
	int x=mijloc(left,right);
	swap(v[right],v[x]);
	int i=left,k=left,p=right;
	while(i<p)
	{
		if(v[i]<v[right]) swap(v[i++],v[k++]);
		else if(v[i]==v[right]) swap(v[i],v[--p]);
		else i++;
	}
	int m=minim(p-k,right-p+1);
	for(i=1;i<=m;i++)
		swap(v[k+m-1],v[right-m+1]);
	quicksort(left,k-1);
	quicksort(right-p+k+1,right);
	}
}
void afisare()
{
	for(int i=1;i<=n;i++)
	iesire<<v[i]<<" ";
}
int main()
{
	citire();
	quicksort(1,n);
	afisare();
	return 0;
}