Cod sursa(job #2263823)

Utilizator flibiaVisanu Cristian flibia Data 19 octombrie 2018 12:53:45
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, a[500100], b[500100];

void Merge(int l, int r, int ll, int rr) {
	int p1 = l, p2 = ll;
	for (int i = 1; i <= rr - l + 1; i++) {
		if (p1 > r)
			b[i] = a[p2++];
		else if (p2 > rr)
			b[i] = a[p1++];
		else if (a[p1] <= a[p2])
			b[i] = a[p1++];
		else b[i] = a[p2++];
	}
	for (int i = l; i <= rr; i++)
		a[i] = b[i - l + 1];
}

void Sort(int st, int dr) {
	if (st == dr)
		return;
	int mid = st + dr >> 1;
	Sort(st, mid);
	Sort(mid + 1, dr);
	Merge(st, mid, mid + 1, dr);
}

int main() {
	in >> n;
	for (int i = 1; i <= n; i++)
		in >> a[i];
	Sort(1, n);
	for (int i = 1; i <= n; i++)
		out << a[i] << ' ';
	return 0;
}