Cod sursa(job #315434)

Utilizator IoannaPandele Ioana Ioanna Data 15 mai 2009 17:03:03
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
long n;
int s;
long v[500000];

void read()
{
	scanf("%ld",&n);
    long i;
	s=0;
	scanf("%ld",&v[1]);
	for (i=2;i<=n;i++)
	{
		scanf("%ld",&v[i]);
		if (v[i]<v[i-1])
			s=1;
    }
	if (!s)
	{
		for (i=n;i>=1;i--)
			printf("%ld ",v[i]);
	}
	
}

long part(long st,long dr)
{
	long p,aux,i,j;
	i=st-1;
	j=dr+1;
	p=v[(st+dr)/2];
	while (1)
	{
		do {i++;} while (v[i]<p);
		do {j--;} while (v[j]>p);
		if (i<j)
		{
			aux=v[i];
			v[i]=v[j];
			v[j]=aux;
		}
		else return j;
	}
}


void quicks(long st,long dr)
{
	long p;
	if (st<dr)
	{
		p=part(st,dr);
		quicks(st,p);
		quicks(p+1,dr);
	}
	
}

int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	read();
	if (s)
	{
	quicks(1,n);
	long i;
	for (i=1;i<=n;i++)
	{	
		printf("%ld ",v[i]);
	}
	}
	printf("\n");
	return 0;
}