Cod sursa(job #2531032)

Utilizator RobysenLazarov Robert Robysen Data 25 ianuarie 2020 16:18:11
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

#define nMax 500001

int n, v[nMax];

void merge(int st, int mij, int dr) {
	int h, i, j, a[nMax], k;
	h = st;
	i = st;
	j = mij + 1;
	while ((h <= mij) && (j <= dr)) {
		if (v[h] <= v[j]) {
			a[i] = v[h];
			h++;
		}
		else {
			a[i] = v[j];
			j++;
		}
		i++;
	}
	if (h > mij) {
		for (k = j; k <= dr; k++) {
			a[i] = v[k];
			i++;
		}
	}
	else {
		for (k = h; k <= mij; k++) {
			a[i] = v[k];
			i++;
		}
	}
	for (k = st; k <= dr; k++)
		v[k] = a[k];
}

void mergeSort(int st, int dr) {
	if (st < dr) {
		int mij = st + (dr - st) / 2;
		mergeSort(st, mij);
		mergeSort(mij + 1, dr);
		merge(st, mij, dr);
	}
	
}

int main() {
	f >> n;
	for (int i = 1; i <= n; i++)
		f >> v[i];
	mergeSort(1, n);
	for (int i = 1; i <= n; i++)
		g << v[i] << ' ';
}