Cod sursa(job #793875)

Utilizator AndreyPAndrei Poenaru AndreyP Data 4 octombrie 2012 16:05:02
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#define N_MAX 500000

int N;
int v[N_MAX], vAux[N_MAX];

template<typename T>
inline void swap(T& x, T& y) {
	T z = x;
	x = y;
	y = z;
}

inline void read() {
	std::ifstream fin("algsort.in");

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

	fin.close();
}

void mergesort(int begin, int end) {
	if (begin + 1 == end) {
		return;
	}

	int mid = (begin + end) / 2;
	mergesort(begin, mid);
	mergesort(mid, end);

	int i = begin, j = mid, k = begin;
	while (i < mid && j < end) {
		if (v[i] < v[j]) {
			vAux[k++] = v[i++];
		} else {
			vAux[k++] = v[j++];
		}
	}

	while (i < mid) {
		vAux[k++] = v[i++]; 
	}
	while (j < end) {
		vAux[k++] = v[j++];
	}

	for (i = begin; i < end; ++i) {
		v[i] = vAux[i];
	}
}

inline void print() {
	std::ofstream fout("algsort.out");

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

	fout.close();
}

int main() {
	read();
	mergesort(0, N);
	print();

	return 0;
}