Cod sursa(job #842247)

Utilizator Brz_VladBrezae Vlad Brz_Vlad Data 26 decembrie 2012 15:42:32
Problema Sortare prin comparare Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 0.79 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 store=st-1;
	
	int i;
	for(i=st;i<dr;i++){
		if( v[i] < v[dr] ){
			store++;
			swap(store,i);
		}
	}
	
	swap(store+1,dr);
	
	quicksort(st,store);
	quicksort(store+2,dr);
}

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