Cod sursa(job #1778115)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 13 octombrie 2016 15:00:11
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
// MERGESORT

#include <iostream>
#include <fstream>
#define NMAX 500001

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");
int A[NMAX], AUX[NMAX], k, n;

void Merge(int xA, int yA, int xB, int yB)
{
	int i = xA, j = xB;
	k = 0;
	while (i <= yA && j <= yB)
	{
		if (A[i] < A[j])
			AUX[++k] = A[i++];
		else
			if (A[i] > A[j])
				AUX[++k] = A[j++];
			else
				AUX[++k] = A[i++], AUX[++k] = A[j++];
	}
	while (i<=yA)
		AUX[++k] = A[i++];
	while (j<=yB)
		AUX[++k] = A[j++];
}

void MergeSort(int x, int y)
{
	int m;
	if (x <= y)
	{
		m = x + (y - x) / 2;
		if (x != y)
		{
			MergeSort(x, m);
			MergeSort(m + 1, y);
		}
		Merge(x,m,m+1,y);
		for (int i = 1; i <= k; i++)
			A[i + x - 1] = AUX[i];
	}
}

int main()
{
	in >> n;
	for (int i = 1; i <= n; i++)
		in >> A[i];
	in.close();
	MergeSort(1, n);
	for (int i = 1; i <= n; i++)
		out << A[i] << " ";
	out.close();
	return 0;
}