Cod sursa(job #1738539)

Utilizator helios11radu mihai helios11 Data 6 august 2016 22:38:34
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <cstdlib>
using namespace std;

void swap(int &a, int &b) {
	int aux = a;
	a = b;
	b = aux; 
}

void printArray(int* arr, int n) {
	for (int i = 0; i < n; ++ i) {
		printf("%d ", arr[i]);
	}
	printf("\n");
}

int partition(int* arr, int left, int right) {
	int pivotVal = arr[left + rand() % (right - left + 1)];
	int i = left, j = right;

	while(i < j) {
		if (i < right && arr[i] < pivotVal) {
			++ i;
		}

		if (j > left && arr[j] > pivotVal) {
			-- j;
		}

		if (i < j && arr[i] >= pivotVal && arr[j] <= pivotVal) {
			swap(arr[i], arr[j]);
			++ i;
			-- j;
		}
	}

	// return pivot position
	return i;
}

void qsort(int* arr, int left, int right) {

	if (right <= left) {
		return;
	}

	int i = partition(arr, left, right);

	qsort(arr, left, i - 1);
	qsort(arr, i + 1, right);
}


int main() {
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);

	int n;
	scanf("%d", &n);

	int *arr = new int[n];
	for (int i = 0; i < n; ++ i) {
		scanf("%d", &arr[i]);
	}

	qsort(arr, 0, n - 1);

	printArray(arr, n);

	delete[] arr;

	return 0;
}