Cod sursa(job #2175902)

Utilizator AlexnolifeAlexandru Ica Alexnolife Data 16 martie 2018 19:51:29
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <vector>
#include <algorithm>

// define STD_SORT
#define QUICK_SORT
// #define MERGE_SORT

std::ifstream f("algsort.in");
std::ofstream g("algsort.out");

int N, x;
std::vector<int> v;

void Read()
{
	f >> N;

	v.reserve(N);

	for (int i = 1; i <= N; ++i) {
		f >> x;
		v.emplace_back(x);
	}
}

void QuickSort(int lo, int hi)
{
	int i = lo, j = hi, piv = v[lo + (hi - lo) / 2];

	while (i <= j) {
		while (v[i] < piv)
			++i;
		while (v[j] > piv)
			--j;

		if (i <= j) {
			std::swap(v[i], v[j]);

			++i, --j;
		} 
	}
	
	if (j > lo) {
		QuickSort(lo, j);
	}
	if (i < hi) {
		QuickSort(i, hi);
	}
}

int main(int argc, char * argv[])
{
	Read();

#ifdef STD_SORT
	std::sort(v.begin(), v.end());
#endif
#ifdef QUICK_SORT
	QuickSort(0, v.size() - 1);
#endif

	for (int i = 0; i < v.size(); ++i) {
		g << v[i] << ' ';
	}

	return 0;
}