Cod sursa(job #1391309)

Utilizator alex.bullzAlexandru Lilian alex.bullz Data 17 martie 2015 20:12:35
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <iostream>

void merge (int* a, int left, int mid, int right);

void merge_sort (int* a, int left, int right) {
	if (left < right) {
		int mid = left + (right - left) / 2;

		merge_sort (a, left, mid);
		merge_sort (a, mid + 1, right);
		merge (a, left, mid, right);
	}
}

void merge (int* a, int left, int mid, int right) {
	int i, j, k;
	int dim_l = mid - left + 1, dim_r = right - mid;
	int l[dim_l], r[dim_r];

	for (i = 0; i < dim_l; ++i) {
		l[i] = a[left+i];
	}

	for (i = 0; i < dim_r; ++i) {
		r[i] = a[mid+1+i];
	}

	i = 0; j = 0; k = left;
	
	while (i < dim_l && j < dim_r) {
		if (l[i] < r[j]) {
			a[k++] = l[i++];
		} else {
			a[k++] = r[j++];
		}
	}

	while (i < dim_l) {
		a[k++] = l[i++];
	}

	while (j < dim_r) {
		a[k++] = r[j++];
	}
}

int main() {
	std::ifstream in;
	std::ofstream out;
	int n;
	int* array;

	in.open ("algsort.in");
	out.open ("algsort.out");

	in >> n;

	array = new int[n];

	for (int i = 0; i < n; ++i) {
		in >> array[i];
	}

	merge_sort (array, 0, n - 1);

	for (int i = 0; i < n; ++i) {
		out << array[i] << " ";
	}

	in.close();
	out.close();
}