Cod sursa(job #2577791)

Utilizator DawlauAndrei Blahovici Dawlau Data 9 martie 2020 21:03:31
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

void merge(vector <int> &Arr, int lft, int mid, int rgt) {

	vector <int> ans;
	ans.reserve(rgt - lft + 1);

	int i = lft;
	int j = mid + 1;

	while(i <= mid and j <= rgt)
		if (Arr[i] < Arr[j])
			ans.push_back(Arr[i++]);
		else ans.push_back(Arr[j++]);

	while (i <= mid) ans.push_back(Arr[i++]);
	while (j <= rgt) ans.push_back(Arr[j++]);

	for (int idx = lft, ansIdx = 0; idx <= rgt; ++idx, ++ansIdx)
		Arr[idx] = ans[ansIdx];
}

void mergeSort(vector <int> &Arr, int lft, int rgt) {

	if (rgt - lft <= 1) {
		if (Arr[lft] > Arr[rgt])
			swap(Arr[lft], Arr[rgt]);
	}
	else {

		int mid = (lft + rgt) / 2;
		mergeSort(Arr, lft, mid);
		mergeSort(Arr, mid + 1, rgt);
		merge(Arr, lft, mid, rgt);
	}
}

int main() {

	int n;
	fin >> n;

	vector <int> Arr(n);
	for (int &itm : Arr)
		fin >> itm;

	mergeSort(Arr, 0, n - 1);

	for (const int &itm : Arr)
		fout << itm << ' ';
}