Cod sursa(job #842233)

Utilizator Brz_VladBrezae Vlad Brz_Vlad Data 26 decembrie 2012 15:18:18
Problema Sortare prin comparare Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>

#define MAXN 500001

int N;
int v[MAXN];

void print()
{
	int i;
	for(i=1;i<=N;i++)
		printf("%d ",v[i]);
	printf("\n");
}

void swap(int x, int y)
{
	int aux = v[x];
	v[x] = v[y];
	v[y] = aux;
}

void quicksort(int st, int dr)
{
	if(st >= dr)
		return;
	else if( dr == st+1 ){
		if( v[st] > v[dr] ){
			swap(st,dr);
			return;
		}
	}
	
	swap(st+rand()%(dr-st),dr);
	
	int end=dr-1;	
	int i=st;
	
	while(i<end){
		if( v[i] < v[dr] ){
			i++;
		}
		else{
			swap(end,i);
			end--;
		}
	}
	if( v[end] > v[dr]){
		swap(end,dr);
	}
	else{
		swap(end+1,dr);
		end++;
	}
	
	quicksort(st,end-1);
	quicksort(end+1,dr);
}

int main(int argc, char* argv[])
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
		
	scanf("%d",&N);
	int i;
	for(i=1;i<=N;i++)
		scanf("%d",&v[i]);
		
	quicksort(1,N);
	
	print();
	
	return 0;
}