Cod sursa(job #2640794)

Utilizator valen.valentinValentin Valeanu valen.valentin Data 8 august 2020 12:20:46
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <vector>
#define nmax 100010

using namespace std;

int n;
int t[nmax];

void combine(int m, int l, int r)
{
	vector <int> part;

	int l1 = l;
	int l2 = m + 1;

	while (l1 <= m && l2 <= r)
	{
		if (t[l1] < t[l2]) part.push_back(t[l1++]); else
			part.push_back(t[l2++]);
	}

	while (l1 <= m) part.push_back(t[l1++]);
	while (l2 <= r) part.push_back(t[l2++]);

	for (int i = 0, p = l; p <= r; p++, i++) t[p] = part[i];
}

void merge_sort(int l, int r)
{
	if (l == r) return;

	int m = (l + r) / 2;

	merge_sort(l, m);
	merge_sort(m + 1, r);

	combine(m, l, r);
}

int main()
{
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);

	ios_base::sync_with_stdio(false); cin.tie(0);

	cin >> n;

	for (int i = 1; i <= n; i++) cin >> t[i];

	merge_sort(1, n);

	for (int i = 1; i <= n; i++) cout << t[i] << ' ';

	return 0;
}