Cod sursa(job #361701)

Utilizator prdianaProdan Diana prdiana Data 6 noiembrie 2009 12:02:08
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
#define MAXN 500002

int a[MAXN];

inline void change(int &v1,int &v2)
{
	int temp = v1;
	v1 = v2;
	v2 = temp;
}

inline int partition(int st,int dr)
{
	int i = st, j = dr-1;
	int x = a[(st+dr) /2];
	change(a[dr],a[(st+dr) / 2]);
	while (true)
	{
		while (a[i]<=x && i <= dr)
		{
			i++;
		}
		while (a[j]>=x && j >= st)
		{
			j--;
		}
		if (i<j)
		{
			change(a[i],a[j]);
		}
		else
		{
			change(a[j+1],a[dr]);
			return j+1;
		}
	}
}

inline void qsort(int st,int dr)
{
	int r;
	if (st<dr)
	{

		r = partition(st,dr);
		qsort(st,r);
		qsort(r+1,dr);
	}
}

int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	int n;
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	qsort(1,n);
	for (int i=1;i<=n;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}