Cod sursa(job #938403)

Utilizator antonioteoZait Teodor Antonio antonioteo Data 12 aprilie 2013 16:26:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <cstring>
#define MAX_N 500004
using namespace std;
const char iname[] = "algsort.in";
const char oname[] = "algsort.out";
ifstream fin(iname);
ofstream fout(oname);
int N, i, j, aux;
int a[MAX_N], c[MAX_N];
inline void merge (int a[MAX_N], int l, int r)
{
	int m = (l + r) / 2, ind = 0;
	for (i = l, j = m + 1; i <= m && j <= r;)
	{
		if (a[i] < a[j]) 
			c[++ind] = a[i], ++i;
		else
		{
			if (a[i] == a[j]) 
				c[++ind] = a[i], c[++ind] = a[j], ++i, ++j;
			else 
				c[++ind] = a[j], ++j;
		}
	}
	for (; i <= m; ++i) c[++ind] = a[i];
	for (; j <= r; ++j) c[++ind] = a[j];
	for (i = l, j = 1; j <= ind; ++i, ++j)
		a[i] = c[j];
}
void merge_sort (int left, int right)
{
	if (left == right) return;
	int m = (left + right) / 2;
	merge_sort(left, m); merge_sort(m + 1, right);
	merge(a, left, right);
}
int main()
{
	fin >> N; 
	for (i = 1; i <= N; ++i) fin >> a[i];
	merge_sort(1, N);
	for (i = 1; i <= N; ++i) 
		fout << a[i] << ' ';
	return 0;
}