Cod sursa(job #554191)

Utilizator AplayLazar Laurentiu Aplay Data 14 martie 2011 17:48:55
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>
int v[500001],n;

void citire()
{
	FILE*f=fopen("algsort.in","r");
	fscanf(f,"%d",&n);
	for(int i=0;i<n;i++) fscanf(f,"%d",&v[i]);
	fclose(f);
}

void scriere()
{
	FILE*f=fopen("algsort.out","w");
	for(int i=0;i<n;i++) fprintf(f,"%d ",v[i]);
	fclose(f);
}

void Interclasare(int A[],int st,int m,int dr)
{
	int *B = new int[dr-st+1];
	int i=st, j=m+1, k=0;
	while(i<=m && j<=dr)
		if(A[i] <= A[j] )
			B[k++] = A[i++] ;
		else B[k++] = A[j++];
	
	while ( i<=m ) B[k++] = A[i++];
	while (j <= dr) B[k++] = A[j++];
	
	for(i=0;i<k;i++) A[st+i] = B[i];
	
	delete []B;
}

void MergeSort(int A[],int st,int dr)
{
	if(st<dr)
	{
		int m=(st+dr)/2;
		MergeSort(A,st,m);
		MergeSort(A,m+1,dr);
		Interclasare(A,st,m,dr);
	}
}

int main()
{
	citire();
	MergeSort(v,0,n-1);
	scriere();
	return 0;
}