Cod sursa(job #616568)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 12 octombrie 2011 20:50:50
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
#define N_MAX 500010

int V[N_MAX];
int n;
inline void swap(int &x, int &y) {
	int z = x; x = y; y = z;
}
int split(int st, int dr) {
	int piv = V[(st+dr)/2];
	int p = st-1, q = dr+1;
	while(1) {
		p++;
		q--;
		while(V[p] < piv ) p++;
		while(V[q] > piv ) q--;
		if(p < q) swap(V[p], V[q]);
		else 
			return q;

	}
	
	return q;
}
void quicksort(int st, int dr) {
	if(st >= dr) 
		return;

	int m = split(st, dr);
	if(m < st) m = st;
	quicksort(st, m);
	quicksort(m+1,dr);
}
int main() {
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);
	
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i)
		scanf("%d", &V[i]);
	
	quicksort(1, n);
	for(int i = 1; i <= n; ++i)
		printf("%d ", V[i]);
	return 0;
}