Cod sursa(job #473510)

Utilizator robigiirimias robert robigi Data 29 iulie 2010 21:35:50
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
// Sortare prin comparare(Merge sort).cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include "stdio.h"

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

int n, v[500001], w[500001];

void read()
{
	fscanf(f, "%d", &n);
	for (int i=1; i<=n; ++i)
		fscanf(f, "%d", &v[i]);
}


void mergesort(int lo, int hi)
{
	int mid=lo+(hi-lo)/2;

	if (lo==hi) return;
	
	mergesort(lo, mid);
	mergesort(mid+1, hi);
	
	for (int i=lo, j=mid+1, k=lo; i<=mid || j<=hi;)
	{
		if (j>hi || (i<=mid && v[i]<v[j]))
			w[k++]=v[i++];
		else
			w[k++]=v[j++];
	}
	for (int m=lo; m<=hi; ++m)
		v[m]=w[m];
}




int main()
{
	read();
	mergesort(1, n);
	for (int i=1; i<=n; ++i)
		fprintf(g, "%d ", v[i]);
	return 0;
}