Cod sursa(job #747658)

Utilizator FlameingoAiordachioaei Marius Flameingo Data 11 mai 2012 20:00:28
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<cstdio>
#define DMAX 500000
using namespace std;
int v[DMAX],n;
void citire()
{
	freopen("algsort.in","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&v[i]);
}
void interclasare(int a,int b,int m)
{
	int aux[DMAX],i=a,j=b+1,k=0;
	while(i<=b&&j<=m)
		if(v[i]<v[j])
			aux[++k]=v[i++];
		else
			aux[++k]=v[j++];
	while(i<=b)
		aux[++k]=v[i++];
	while(j<=m)
		aux[++k]=v[j++];
	for(i=a;i<=m;i++)
		v[i]=aux[i-a+1];
}
void sortare(int a,int b)
{
	if(b>a)
	{
		int m=(a+b)/2;
		sortare(a,m);
		sortare(m+1,b);
		interclasare(a,m,b);
	}
}
void afisare()
{
	freopen("algsort.out","w",stdout);
	for(int i=1;i<=n;i++)
		printf("%d ",v[i]);
}
int main()
{
	citire();
	sortare(1,n);
	afisare();
}