Cod sursa(job #2653310)

Utilizator mvcl3Marian Iacob mvcl3 Data 27 septembrie 2020 17:25:56
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <vector>


void merge(std::vector<int>& v, int left, int m, int right)
{
	std::vector<int> tmp;
	
	int i = m + 1;
	int j = left;
	while (j <= m && i <= right)
	{
		if (v[j] < v[i])
		{
			tmp.push_back(v[j]);
			++j;
		}
		else
		{
			tmp.push_back(v[i]);
			++i;
		}
	}

	for (; j <= m; ++j)
	{
		tmp.push_back(v[j]);
	}
	for (; i <= right; ++i)
	{
		tmp.push_back(v[i]);
	}
	std::copy(tmp.begin(), tmp.end(), v.begin() + left);
}

void sort(std::vector<int>& v, int left, int right)
{
	if (left >= right)
		return;

	int m = (left + right) >> 1;
	sort(v, left, m);
	sort(v, m + 1, right);
	
	merge(v, left, m, right);
}

int main()
{
	int n;
	std::vector<int> v;
	std::ifstream in("algsort.in");
	
	in >> n;
	v.resize(n);
	for (int i = 0; i < n; ++i)
	{
		in >> v[i];
	}

	sort(v, 0, n - 1);

	std::ofstream out("algsort.out");
	for (int i = 0; i < n; ++i)
	{
		out << v[i] << ' ';
	}

	return 0;
}