Cod sursa(job #483318)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 7 septembrie 2010 23:02:31
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define Nmax 500001

#define swap(a,b) a^=b^=a^=b

int part(int st, int dr, int A[]) {
	int i, j, val, pivot;
	i=st-1; j=dr+1;
	pivot=st+rand()%(dr-st+1);
	val=A[pivot];
	while(1) {
		do i++; while(A[i]<val);
		do j--; while(A[j]>val);
		if(i<j)
			swap(A[i],A[j]);
		else
			return j;
	}
}

void qsort(int st, int dr, int A[]) {
	int mij;
	if(st<dr) {
		mij=part(st,dr,A);
		qsort(st,mij,A);
		qsort(mij+1,dr,A);
	}
}

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