Cod sursa(job #568312)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 31 martie 2011 08:03:23
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
//sortare prin interclasare (divide et impera)
#include <fstream>
using namespace std;
#define DN 500005

ifstream fi("algsort.in");
ofstream fo("algsort.out");

int N, A[DN], B[DN];

void die(int st, int dr)
{
	if (st >= dr)
		return;
	
	int m = (st + dr) >> 1;
	die (st, m);
	die (m + 1, dr);

	int i = st, j = m + 1, k = -1;
	while (i <= m && j <= dr)
		if (A[i] < A[j])
			B[++k] = A[i++];
		else
			B[++k] = A[j++];
	while (i <= m)
		B[++k] = A[i++];
	while (j <= dr)
		B[++k] = A[j++];
	for (i = st; i <= dr; i++)
		A[i] = B[i - st];
}

int main()
{
	fi >> N;
	for (int i = 0; i < N; i++)
		fi >> A[i];
	die(0, N - 1);
	for (int i = 0; i < N; i++)
		fo << A[i] << ' ';
	
	return 0;
}