Cod sursa(job #2175801)

Utilizator AlexnolifeAlexandru Ica Alexnolife Data 16 martie 2018 19:07:24
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 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 Divide(int lo, int hi, int& i, int& j)
{
	int piv = lo + (hi - lo) / 2;
	i = lo, j = hi;

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

		if (i < j) {
			std::swap(v[i], v[j]);
			
			++i, --j;
		}
	}
}

void QuickSort(int lo, int hi)
{
	if (lo < hi) {
		int i, j;

		Divide(lo, hi, i, j);
		QuickSort(lo, i - 1);
		QuickSort(j + 1, 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;
}