Cod sursa(job #1532979)

Utilizator greenadexIulia Harasim greenadex Data 21 noiembrie 2015 21:44:46
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>

using namespace std;

const int MAX = 5e5 + 5;
int a[MAX], length;

int partition (int a[], int left, int right) {
	int pivot = a[rand() % (right - left + 1) + left];
	int i = left - 1, j = right + 1;
	
	while (true) {
		do 
			j--;
		while(a[j] > pivot);
	
		do 
			i++;
		while(a[i] < pivot);
	
		if (i < j)
			swap(a[i], a[j]);
		else return j;
	}
}

void randomizedQS(int a[], int left, int right) {
	if (left >= right)
		return;
	
	int mid = partition(a, left, right);
	
	randomizedQS(a, left, mid);
	randomizedQS(a, mid + 1, right);
}

int main() {
	srand(time(0));
	
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);
	
	scanf("%d\n", &length);
	for (int i = 1; i <= length; i++)
		scanf("%d ", &a[i]);
	
	randomizedQS(a, 1, length);

	for (int i = 1; i <= length; i++) 
		printf("%d ", a[i]);

	return 0;
}