Cod sursa(job #344761)

Utilizator bigdoggMic Matei bigdogg Data 31 august 2009 15:30:29
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream.h>

int V[500001];

int mergesort(int*,int,int);
void merge(int*,int,int,int);

int main()
{
	int i,N;

	ifstream in("algsort.in");
	in>>N;
	for(i=1;i<=N;i++)
		in>>V[i];
	in.close();
	
	mergesort(V,1,N);
	
	ofstream out("algsort.out");
	for(i=1;i<=N;i++)
		out<<V[i]<<' ';
	out.close();

	return 0;
}
	
int mergesort(int* v,int first, int last)
{
	int mid;
	if(first<last)
	{
		mid=(first+last)/2;
		mergesort(v,first,mid);
		mergesort(v,mid+1,last);
		merge(v,first,mid,last);
	}
	else return 0;
}

void merge(int* v,int first,int mid,int last)
{
	int i=first,j=mid+1,k=first,c[500001];
	while(i<=mid && j<=last)
	{
		if(v[i]<v[j]){ c[k]=v[i]; i++; }
		else{ c[k]=v[j]; j++; }
		k++;
	}
	while(i<=mid){ c[k]=v[i]; k++; i++; }
	while(j<=last){ c[k]=v[j]; k++; j++; }
	for(i=first;i<k;i++) v[i]=c[i];
}