Cod sursa(job #3123243)

Utilizator daristyleBejan Darius-Ramon daristyle Data 22 aprilie 2023 18:13:42
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <random>

using namespace std;

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

const int N_MAX = 5e5;
int v[N_MAX];

void QuickSort(int begin, int end) {
	int b = begin, e = end, pivot = v[begin + rand() % (end - begin)];

	while(v[b] < pivot)
		++b;
	while(v[e] > pivot)
		--e;

	while(b < e){
		int aux = v[b];
		v[b] = v[e];
		v[e] = aux;

		do
			++b;
		while(v[b] < pivot);
		do
			--e;
		while(v[e] > pivot);
	}

	if(e - begin + 1 < end - e){
		if(end > e + 1)
			QuickSort(e + 1, end);
		if(e > begin)
			QuickSort(begin, e);
	}else{
		if(e > begin)
			QuickSort(begin, e);
		if(end > e + 1)
			QuickSort(e + 1, end);
	}
}

int main() {
	int n;
	fin >> n;
	for(int i = 0; i < n; ++i)
		fin >> v[i];

	QuickSort(0, n - 1);

	for(int i = 0; i < n; ++i)
		fout << v[i] << ' ';
	fout.put('\n');

	fin.close();
	fout.close();
	return 0;
}