Cod sursa(job #627900)

Utilizator paul24090FMI - Balauru Paul paul24090 Data 30 octombrie 2011 21:51:19
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>

using namespace std;

ifstream fi("algsort.in");
ofstream fo("algsort.out");

int a[500002],n;

void citire()
{
	fi>>n;
	for(int i=1;i<=n;i++)
		fi>>a[i];
	fi.close();
}

void interclasare(int p,int m,int q)
{
	int i=p,j=m+1,k=1;
	int b[500002];
	while(i<=m && j<=q)
	{
		if(a[i]<a[j])
			b[k++]=a[i++];
		else b[k++]=a[j++];
	}
	while(i<=m)
		b[k++]=a[i++];
	while(j<=q)
		b[k++]=a[j++];
	for(i=p;i<=q;i++)
		a[i]=b[i-p+1];
}


void mergeSort(int p,int q)
{
	if(q>p)
	{
		int m=(p+q)/2;
		mergeSort(p,m);
		mergeSort(m+1,q);
		interclasare(p,m,q);
	}
}

void afisare()
{
	for(int i=1;i<=n;i++)
		fo<<a[i]<<" ";
	fo<<"\n";
	fo.close();
}

int main()
{
	citire();
	mergeSort(1,n);
	afisare();
	return 0;
}