Cod sursa(job #371542)

Utilizator GotenAmza Catalin Goten Data 5 decembrie 2009 18:52:03
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>

using namespace std;

long a[500000];

void qs(long l, long r)
{
	long i=l-1,j=r,p=l-1,q=r,v=a[r],aux,k;
	if(r>l)
	{
		for(;;)
		{
			while(a[++i]<v);
			while(v<a[--j])if(j==l)break;
			if(i>=j)break;
			aux=a[i];
			a[i]=a[j];
			a[j]=aux;
			if(a[i]==v)
			{
				p++;
				aux=a[p];
				a[p]=a[i];
				a[i]=aux;
			}
			if(a[j]==v)
			{
				q--;
				aux=a[q];
				a[q]=a[j];
				a[j]=aux;
			}
		}
		aux=a[i];
		a[i]=a[r];
		a[r]=aux;
		j=i-1;
		i=i+1;
		for(k=l;k<p;k++,j--)
		{
			aux=a[k];
			a[k]=a[j];
			a[j]=aux;
		}
		for(k=r-1;k>q;k--,i++)
		{
			aux=a[i];
			a[i]=a[k];
			a[k]=aux;
		}
		qs(l,j);
		qs(i,r);
	}
}
			

int main()
{
	long n,i;
	ifstream f("algsort.in");
	ofstream g("algsort.out");
	f>>n;
	for(i=1;i<=n;i++)f>>a[i];
	qs(1,n);
	for(i=1;i<=n;i++)g<<a[i]<<' ';
	return 0;
}