Cod sursa(job #3206235)

Utilizator mihai_zegheruZegheru Mihai mihai_zegheru Data 22 februarie 2024 00:05:14
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
using namespace std;

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

const int MAX_N = 500005;
int n;
int v[MAX_N], merged[MAX_N];

void Merge(int lf, int rg) {
	int mid = lf + ((rg - lf) / 2);

	int aIdx = lf;
	int bIdx = mid + 1;

	int size = rg - lf + 1;

	for (int i = 0; i < size; i++) {
		if (aIdx <= mid && bIdx <= rg) {
			if (v[aIdx] < v[bIdx]) {
				merged[i] = v[aIdx];
				aIdx++;
			}
			else {
				merged[i] = v[bIdx];
				bIdx++;
			}
		}
		else if (aIdx <= mid) {
			merged[i] = v[aIdx];
			aIdx++;
		}
		else if (bIdx <= rg) {
			merged[i] = v[bIdx];
			bIdx++;
		}
	}

	for (int i = lf; i <= rg; i++) {
		v[i] = merged[i - lf];
	}
}

void MSort(int v[], int lf, int rg) {
	if (lf >= rg) {
		return;
	}

	int mid = lf + ((rg - lf) / 2);
	MSort(v, lf, mid);
	MSort(v, mid + 1, rg);

	Merge(lf, rg);
}

int main() {
	fin >> n;

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

	MSort(v, 1, n);

	for (int i = 1; i <= n; i++) {
		fout << v[i] << ' ';
	}
	fout << '\n';
}