Cod sursa(job #3123250)

Utilizator daristyleBejan Darius-Ramon daristyle Data 22 aprilie 2023 18:36:39
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>

using namespace std;

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

const int N_MAX = 5e5;
int v[N_MAX], aux[N_MAX / 2];

void Merge(int b1, int e1, int b2, int e2) {
	for(int i = b1; i <= e1; ++i)
		aux[i - b1] = v[i];

	int i1 = 0, i2 = b2, i = b1;
	while(i1 <= e1 - b1 && i2 <= e2)
		if(aux[i1] <= v[i2])
			v[i++] = aux[i1++];
		else
			v[i++] = v[i2++];

	while(i1 < e1 - b1 + 1)
		v[i++] = aux[i1++];
}

void MergeSort(int begin, int end) {
	int mid = begin + ((end - begin) >> 1);

	if(mid > begin)
		MergeSort(begin, mid);
	if(end > mid + 1)
		MergeSort(mid + 1, end);

	Merge(begin, mid, mid + 1, end);
}

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

	MergeSort(0, n - 1);

	for(int i = 0; i < n; ++i)
		fout << v[i] << ' ';
	fout.put('\n');

	fin.close();
	fout.close();
	return 0;
}