Cod sursa(job #2529508)

Utilizator HumikoPostu Alexandru Humiko Data 23 ianuarie 2020 16:43:52
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
//Alex Postu :^)
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <cstring>
#include <bitset>

using namespace std;

//#include <iostream>
#include <fstream>

//ifstream cin("input.in"); ofstream cout("output.out");
ifstream cin ("algsort.in"); ofstream cout ("algsort.out");

static const int NMAX = 5e5 + 5;

int v[NMAX];
int sortedV[NMAX];

void mergeSort(int left, int right) {
	if (left == right) {
		return;
	}

	int middle = left + ((right - left) >> 1);

	mergeSort(left, middle);
	mergeSort(middle + 1, right);

	int leftIdx = left;
	int rightIdx = middle+1;

	for (int i = left; i <= right; ++i) {
		if (rightIdx > right || (leftIdx <= middle && v[leftIdx] <= v[rightIdx])) {
			sortedV[i] = v[leftIdx++];
		}
		else {
			sortedV[i] = v[rightIdx++];
		}
	}

	for (int i = left; i <= right; ++i) {
		v[i] = sortedV[i];
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	
	int n;
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		cin >> v[i];
	}

	mergeSort(1, n);

	for (int i = 1; i <= n; ++i) {
		cout << v[i] << " ";
	}
}