Cod sursa(job #658966)

Utilizator madmanjonesJones the one madmanjones Data 9 ianuarie 2012 20:45:11
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>

int a[500001],c[500001],lung;

void citire();
void afisare();
void mergesort(int l, int r);
void interclasare(int l,int m,int r);


int main()
{
	citire();
	mergesort(1,lung);
	afisare();
return 0;
}

void citire()
{
	FILE* file=fopen("algsort.in","r");
	fscanf(file,"%d\n",&lung);
	for(int i=1;i<=lung;++i)
		fscanf(file,"%d",&a[i]);
	fclose(file);
}



void mergesort(int l, int r)
{
	if (l==r) return;
	int m=(l+r)/2;
	mergesort(l,m);
	mergesort(m+1,r);
	interclasare(l,m,r);
}

void interclasare(int l,int m,int r)
{
		int i=l,j=m+1,ind=0;
		while (ind<=r-l+1)
		{
			if ((i<=m)&&(j<=r))
			{
				if (a[i]<a[j])
					c[ind++]=a[i++];
				else c[ind++]=a[j++];
			}
			else if ((i>m)&&(j<=r)) c[ind++]=a[j];
			else if ((i<=m)&&(j>r)) c[ind++]=a[i]; 
		}
		for (int b=0;b<r-l+1;++b)
			a[l+b]=c[b];
}


void afisare()
{
	FILE* file=fopen("algsort.out","w+");
	for(int i=1;i<=lung;++i)
		fprintf(file,"%d ",a[i]);
	fprintf(file,"\n");
	fclose(file);
}