Cod sursa(job #357787)

Utilizator petroMilut Petronela petro Data 20 octombrie 2009 18:44:00
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<stdio.h>
#define M 500000

FILE *f=fopen("algsort.in","r");
FILE *g=fopen("algsort.out","w");

long n,v[M];

void interclasare(long i, long j)
{
	long m,p,q,k,w[M];
	m=(i+j)/2;
	p=i;
	q=m+1;
	k=0;
	
	while(p<=m && q<=j)
	{
		if(v[p]<v[q]) w[++k]=v[p++];
		else w[++k]=v[q++];
	}
 
    while(p<=m)
		w[++k]=v[p++];
	
	while(q<=j)
		w[++k]=v[q++];
	
	k=1;	
	for(p=i;p<=j;p++)
		v[p]=w[k++];
}

void merge(long i, long j)
{
	if(i<j) {long m=(i+j)/2;
	         merge(i,m);
	         merge(m+1,j);
			 interclasare(i,j);}
}

void afis()
{
	long i;
	
	for(i=1;i<=n;i++)
		fprintf(g,"%ld ",v[i]);
	
	fprintf(g,"\n");
}

int main()
{
	long i;
	
	fscanf(f,"%ld",&n);
	
	for(i=1;i<=n;i++)
		fscanf(f,"%ld",&v[i]);
	
	merge(1,n);
	afis();
	
	fclose(f);
	fclose(g);
	return 0;
}