Cod sursa(job #476113)

Utilizator Addy.Adrian Draghici Addy. Data 9 august 2010 20:10:26
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define NMAX 500050

int V[NMAX], n;

void read ();
void quicksort (int[], int, int);
int partition (int[], int, int);
void print_sol ();

int main () {
	
	freopen ("algsort.in", "r", stdin);
	freopen ("algsort.out", "w", stdout);
	
	read ();
	
	quicksort (V, 1, n);
	
	print_sol ();
	
	return 0;
}

void read () {
	
	int i;
	
	scanf ("%d", &n);
	for (i = 1; i <= n; i++)
		scanf ("%d", &V[i]);
}

void quicksort (int V[], int p, int u) {
	
	int pivot;
	
	if (p < u) {
		pivot = partition (V, p, u);
		quicksort (V, p, pivot - 1);
		quicksort (V, pivot + 1, u);
	}
}

int partition (int V[], int p, int u) {
	
	int x, i, j;
	
	x = V[u];
	i = p - 1;
	
	for (j = p; j < u; j++)
		if (V[j] <= x) {
			i++;
			swap (V[i], V[j]);
		}
	swap (V[i+1], V[u]);
	
	return i + 1;
}

void print_sol () {
	
	int i;
	
	for (i = 1; i <= n; i++)
		printf ("%d ", V[i]);
}