Cod sursa(job #856136)

Utilizator alinaelenaFMI Colceag Alina alinaelena Data 15 ianuarie 2013 22:58:50
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<stdio.h>
using namespace std;
int v[500001], c[500001];
int n;

void inter(int a,int b,int e,int d)
{
	int aux;
	/*if (a-b==0)
	{
		if (v[a]>v[b])
		{aux=v[a];
		v[a]=v[b];
		v[b]=aux;
		}
	else
	{*/
		int i,j,k;
		i=a;j=e; k=0;
		while (i<=b && j<=d)
			if (v[i]<v[j])
		{
			k++;
			c[k]=v[i];
			i++;
		}
			else
		{
			k++;
			c[k]=v[j];
			j++;
		}
			
		if (i<=b)
		for (int l=i;l<=b;l++)
				{k++;
					c[k]=v[l];
				}
		if (j<=d)
		for (int l=j;l<=d;l++)
				{k++;
					c[k]=v[l];
				}		
		
	for (int l=a;l<=d;l++)	
	v[l]=c[l-a+1];
}

int merge (int v[],int l,int r)
{
	if (l>=r) return 0;
	merge (v,l,(l+r)/2);
	merge(v,(l+r)/2+1,r);
	inter(l,(l+r)/2,(l+r)/2+1,r);
}

void read()
{
	int i;
	scanf("%d",&n);
	for (i=1;i<=n;++i)
		scanf("%d",&v[i]);
}

void write()
{
	int i;
	for (i=1;i<=n;++i)
		printf("%d ",v[i]);
}

int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	read();
	merge(v,1,n);
	write();
}