Cod sursa(job #905605)

Utilizator bogdan...Marchis Bogdan Cristian bogdan... Data 5 martie 2013 22:53:58
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>
#define NMAX 500001

void merge_sort (int v[NMAX], int a, int q, int b);

void merge (int v[NMAX], int a, int b)
{
	if (a < b)
	{
		int q;
		q = (a + b) / 2;
		merge (v, a, q);
		merge (v, q + 1, b);
		merge_sort (v, a, q, b);
	}
}

void merge_sort (int v[NMAX], int a, int q, int b)
{
	int L[NMAX], R[NMAX], i, j, n1, n2, k;
	n1 = q - a + 1;
	n2 = b - q;
	for (i = 0; i < n1; i++){
		L[i] = v[a + i];
	}
	for (i = 0; i < n2; i++){
		R[i] = v[q + i + 1];
	}
	L[n1] = 1 << 31;
	R[n2] = 1 << 31;
	i = 0;
	j = 0;
	for (k = a; k <= b; k++){
		if (L[i] <= R[j])
		{
			v[k] = L[i];
			i++;
		}
		else
		{
			v[k] = R[j];
			j++;
		}
	}
}

int main ()
{
	freopen ("algsort.in", "r", stdin);
	freopen ("algsort.out", "w", stdout);
	int n, v[NMAX], i;
	scanf ("%d", &n);
	for (i = 0; i < n; i++)
		scanf ("%d", &v[i]);
	merge (v, 0, n - 1);
	for (i = 0; i < n; i++)
		printf ("%d ", v[i]);
	printf ("\n");

	return 0;
}