Cod sursa(job #3285057)

Utilizator vladxandrewVlad Andrei vladxandrew Data 12 martie 2025 14:53:33
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

void merge(vector<int>& v, int l, int m, int r)
{
	int s1(m - l + 1), s2(r - m);
	vector<int> L(s1), R(s2);
	for (int i = 0; i < s1; ++i)
		L[i] = v[l + i];

	for (int i = 0; i < s2; ++i)
		R[i] = v[m + i + 1];

	int i(0), j(0), k(l);
	while (i < s1 && j < s2)
		if (L[i] <= R[i])
			v[++k] = L[i++];
		else
			v[++k] = R[j++];

	while (i < s1)
		v[++k] = L[i++];

	while (j < s2)
		v[++k] = R[j++];

}

void mS(vector<int>& v, int l, int r)
{
	if (l < r)
	{
		int m = (l + (r - l)) >> 1;
		mS(v, l, m);
		mS(v, m + 1, r);
		merge(v, l, m, r);
	}
}

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

		mS(v, 0, n - 1);
		for (int i = 0; i < n; ++i)
			g << v[i] << " ";
	}
	catch (exception e)
	{
		throw(e);
		exit;
	}
	f.close();
	g.close();
	return 0;
}