Cod sursa(job #2973980)

Utilizator matthriscuMatt . matthriscu Data 2 februarie 2023 21:13:34
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;

size_t partition(vector<int>& v, size_t left, size_t right) {
	if (left == right || right == 0)
		return left;

	size_t index = left;
	const int pivot = v[right - 1];

	for (size_t i = left; i + 1 < right; ++i)
		if (v[i] <= pivot)
			swap(v[index++], v[i]);

	swap(v[index++], v[right - 1]);

	return index;
}

void quicksort(vector<int>& v, size_t left, size_t right) {
	if (left == right || right == 0)
		return;

	const size_t index = partition(v, left, right);

	if (index != 0)
		quicksort(v, left, index - 1);

	if (index != right)
		quicksort(v, index, right);
}

int main() {
	ifstream fin("algsort.in");
	ofstream fout("algsort.out");

	int n;

	fin >> n;

	vector<int> v(n);

	for (int &x : v)
		fin >> x;

	shuffle(v.begin(), v.end(), default_random_engine(69));
	quicksort(v, 0UL, v.size());

	for (int &x : v)
		fout << x << ' ';
	fout << '\n';
}