Cod sursa(job #2923947)

Utilizator OffuruAndrei Rozmarin Offuru Data 21 septembrie 2022 18:00:12
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

const int nmax = 5 * 10e5;
int n, v[nmax];

void read()
{
	std::ifstream fin("algsort.in");
	fin >> n; 
	for (int i = 0;i < n;i++)
		fin >> v[i];
	fin.close();
}

void Merge(int lower, int mid, int upper)
{
	int const x = mid - lower + 1, y = upper - mid;
	int* a = new int[x];
	int* b = new int[y];

	for (int i = 0;i < mid - lower + 1;i++)
		a[i] = v[lower + i];
	for (int j = 0;j < upper - mid;j++)
		b[j] = v[mid + j + 1];

	int i = 0, j = 0;

	while (i < mid - lower + 1 && j < upper - mid)
		if (a[i] < b[j])
			v[lower + i + j] = a[i++];
		else
			v[lower + i + j] = b[j++];

	while (i < mid - lower + 1)
		v[lower + i + j] = a[i++];
	while (j < upper - mid)
		v[lower + i + j] = b[j++];

	delete[] a, b;
}

void MergeSort(int lower, int upper)
{
	if (upper <= lower)
		return;
	int mid = (lower + upper) / 2;
	MergeSort(lower, mid);
	MergeSort(mid + 1, upper);
	Merge(lower, mid, upper);
}

void print()
{
	std::ofstream fout("algsort.out");
	for (int i = 0;i < n;i++)
		fout << v[i] << " ";
}

int main()
{
	read();
	MergeSort(0,n-1);
	print();

	return 0;
}