Cod sursa(job #1532948)

Utilizator greenadexIulia Harasim greenadex Data 21 noiembrie 2015 21:02:33
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>

using namespace std;

const int MAX = 5e5 + 5;
int array[MAX], length;

void merge(int array[], int left, int mid, int right) {
	
	int aux_array[100], k = 1, i = left, j = mid + 1;
	
	while (i <= mid && j <= right)
		if (array[i] < array[j])
			aux_array[k++] = array[i++];
		else aux_array[k++] = array[j++];
	
	while (i <= mid)
		aux_array[k++] = array[i++];
	
	while (j <= right)
		aux_array[k++] = array[j++];

	for (int iteraux = 1, iter = left; iter <= right; iter++, iteraux++) 
		array[iter] = aux_array[iteraux];
	
}

void merge_sort(int array[], int left, int right) {
	
	if (left == right)
		return;

	int mid = (left + right) / 2;
	
	merge_sort(array, left, mid);
	merge_sort(array, mid + 1, right);
	merge(array, left, mid, right);
}

int main( ) {
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);

	scanf("%d\n", &length);
	for (int i = 1; i <= length; i++)
		scanf("%d ", &array[i]);

	merge_sort(array, 1, length);

	for (int i = 1; i <= length; i++)
		printf("%d ", array[i]);

	return 0;
}