Cod sursa(job #1040433)

Utilizator vladvlad00Vlad Teodorescu vladvlad00 Data 24 noiembrie 2013 15:20:21
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#define NMax 500005

int n, a[NMax], c[NMax];

void msort(int st, int dr);

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

	int i;
	scanf("%d", &n);

	for (i=0; i<n; i++)
		scanf("%d", &a[i]);

	msort(0, n-1);

	for (i=0; i<n; i++)
		printf("%d ", a[i]);
	printf("\n");
}

void msort(int st, int dr)
{
	int mij, x, y, z;

	if ((dr - st) < 1)
		return;
	
	mij = (st + dr) / 2;
	msort(st, mij);
	msort(mij+1, dr);

	// interclasare
	z = 0;
	x = st;
	y = mij+1;

	while (x <= mij && y <= dr)
	{
		if (a[x] <= a[y])
			c[z++] = a[x++];
		if (a[x] > a[y])
			c[z++] = a[y++];
	}

	while (x <= mij)
		c[z++] = a[x++];

	while (y <= dr)
		c[z++] = a[y++];

	for (x=st, y=0; x<=dr; x++, y++)
		a[x] = c[y];
}