Cod sursa(job #2104018)

Utilizator trifangrobertRobert Trifan trifangrobert Data 11 ianuarie 2018 00:38:00
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
/// merge sort

#include <fstream>

using namespace std;

int n, v[500010];
int aux[500010];

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

void Interclasare(int left, int mid, int right)
{
	int i = left, j = mid + 1;
	int pos = left - 1;
	while (i <= mid && j <= right)
	{
		if (v[i] <= v[j])
			aux[++pos] = v[i++];
		else
			aux[++pos] = v[j++];
	}
	while (i <= mid)
	{
		aux[++pos] = v[i++];
	}
	while (j <= right)
	{
		aux[++pos] = v[j++];
	}
	for (i = left;i <= right;++i)
	{
		v[i] = aux[i];
	}
}

void MergeSort(int left, int right)
{
	if (left == right)
		return;
	int mid = (left + right) / 2;
	MergeSort(left, mid);
	MergeSort(mid + 1, right);
	Interclasare(left, mid, right);
}

void Write()
{
	ofstream fout("algsort.out");
	for (int i = 1;i <= n;++i)
		fout << v[i] << " ";
	fout.close();
}

int main()
{
	Read();
	MergeSort(1, n);
	Write();
	return 0;
}