Cod sursa(job #505398)

Utilizator sunt_emoSunt emo sunt_emo Data 2 decembrie 2010 03:20:59
Problema Sortare prin comparare Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>

void qsort (long*,long,long);
void swap (long*,long,long);
long partition (long*,long,long);

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

void qsort (long *a,long l,long r) {
	if (l<r) {
		int k=partition (a,l,r);
		qsort (a,l,k);
		qsort (a,k+1,r);
	}
}

void swap (long *a,long x,long y) {
	
}

long partition (long *a,long l,long r) {
	long p=l,q,z;
	z=a[(l+r)/2]; a[(l+r)/2]=a[r-1]; a[r-1]=z;	
	for (q=l; q<r-1; q++)
		if (a[q]<a[r-1]) {
			z=a[p]; a[p]=a[q]; a[q]=z;
			p++;
		}
	z=a[p]; a[p]=a[r-1]; a[r-1]=z;
	return p;
}