Cod sursa(job #3206220)

Utilizator mihai_zegheruZegheru Mihai mihai_zegheru Data 21 februarie 2024 23:20:00
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
using namespace std;

const int MAX_N = 500005;

int n;
int v[MAX_N];

int Partition(int v[], int lf, int rg, int pivotVal) {
	int lowerPos = lf - 1;

	for (int i = lf; i < rg; i++) {
		if (v[i] < pivotVal) {
			lowerPos++;
			swap(v[lowerPos], v[i]);
		}
	}

	lowerPos++;
	swap(v[lowerPos], v[rg]);

	return lowerPos;
}

void QSort(int v[], int lf, int rg) {
	if (lf >= rg) {
		return;
	}

	int pivotIdx = (lf + rand()) % (rg - lf + 1);
	int pivotVal = v[pivotIdx];
	swap(v[pivotIdx], v[rg]);

	int partPos = Partition(v, lf, rg, pivotVal);

	QSort(v, lf, partPos - 1);
	QSort(v, partPos + 1, rg);
}

int main() {
	cin >> n;

	// indexed from 1
	for (int i = 1; i <= n; i++) {
		cin >> v[i];
	}

	QSort(v, 1, n);

	for (int i = 1; i <= n; i++) {
		cout << v[i] << ' ';
	}
	cout << '\n';
}