Cod sursa(job #382927)

Utilizator mika17Mihai Alex Ionescu mika17 Data 15 ianuarie 2010 04:12:51
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.78 kb
#include <stdio.h>
#include <stdlib.h>

const char* inFile = "algsort.in";
const char* outFile = "algsort.out";

void swap(int* x, int* y) {
	
	int aux = *x; *x = *y; *y = aux;
}

void quick(int* a,int le,int ri) {
	
	if(le < ri) {
		
		int i = le - 1, j = ri + 1, p = a[le + rand()%(ri - le + 1)];
		//printf("%d\n",p);
		while(i<=j) {
			
			do ++i; while (i<=ri && a[i] < p);
			do --j; while (j>=le && a[j] > p);
			if(i < j) {
				
				swap(&a[i],&a[j]);
			}
		}
		
		quick(a,le,j);
		quick(a,i,ri);
	}
}

int main() {
	
	FILE *fin = fopen(inFile,"rt"),
	*fout = fopen(outFile,"wt");
	
	int N,*A = calloc(500000,sizeof(int));
	
	fscanf(fin,"%d",&N);
	int i;
	for(i = 0;i < N ; ++i) fscanf(fin,"%d",&A[i]);
	
	quick(A,0,N - 1);
	
	for(i = 0;i < N ; ++i) fprintf(fout,"%d ",A[i]);
	
	return 0;
}