Cod sursa(job #379809)

Utilizator TabaraTabara Mihai Tabara Data 3 ianuarie 2010 23:48:48
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <cstdlib>
using namespace std;

#define in "algsort.in"
#define out "algsort.out"

const int NMAX = 500005;
int A[NMAX], N;

int Part( int st, int dr)
{
	int i, j, pivot;
	i = rand()%(dr-st+1)+st;
	pivot = A[i];
	i = st - 1, j = dr + 1;

	while ( 1 )
	{
		do { j--; } while ( A[j] > pivot );
		do { i++; } while ( A[i] < pivot );
		if ( i < j )
		{
			A[i] ^= A[j];
			A[j] ^= A[i];
			A[i] ^= A[j];
		}
		else return j;
	}
}

void QuickSort( int st, int dr )
{
	if ( st < dr )
	{
		int q = Part(st,dr);
		QuickSort(st,q);
		QuickSort(q+1,dr);
	}
}

int main ( void )
{
	freopen ( in, "r", stdin );
	freopen ( out, "w", stdout );

	scanf ( "%d", &N );
	int i;
	for ( i = 1; i <= N; scanf ( "%d", A+i++ ) );

	srand( time(NULL) );

	QuickSort( 1, N );
	for ( i = 1; i <= N; printf ( "%d ", A[i++] ) );

	return 0;
}