Cod sursa(job #1426994)

Utilizator gabi.cristacheGabi Cristache gabi.cristache Data 1 mai 2015 11:40:15
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>

#define MaxN 500005

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int N, v[MaxN], aux[MaxN];

void merge(int, int);

void mergesort(int start, int end) {
	if (start < end) {
		int middle = start + (end - start) / 2;
		mergesort(start, middle);
		mergesort(middle + 1, end);
		merge(start, end);
	}
}

void merge(int start, int end) {
	int middle = start + (end - start) / 2;
	int i = start, j = middle + 1, k = 0;

	while (i <= middle && j <= end) {
		if (v[i] < v[j]) aux[++k] = v[i++];
		else             aux[++k] = v[j++];
	}

	while (i <= middle)
		aux[++k] = v[i++];
	while (j <= end)
		aux[++k] = v[j++];

	for (i = 1; i <= k; ++i)
		v[start + i - 1] = aux[i];
}

int main() {
	fin >> N;
	for (int i = 1; i <= N; ++i)
		fin >> v[i];

	mergesort(1, N);

	for (int i = 1; i <= N; ++i)
		fout << v[i] << ' ';
	fout << '\n';

	return 0;
}