Cod sursa(job #497933)

Utilizator ChallengeMurtaza Alexandru Challenge Data 3 noiembrie 2010 17:44:21
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>

using namespace std;

const char InFile[]="algsort.in";
const char OutFile[]="algsort.out";
const int MaxN=500111;

ifstream fin(InFile);
ofstream fout(OutFile);

int n,v[MaxN],buffer[MaxN];

void merge_sort(int st, int sf)
{
	if(st<sf)
	{
		int mid=(sf+st)>>1;
		merge_sort(st,mid);
		merge_sort(mid+1,sf);
		int min1=st;
		int min2=mid+1;
		int st2=st;
		while(st<=sf)
		{
			if(min1<=mid && min2<=sf)
			{
				if(v[min1]<=v[min2])
				{
					buffer[st++]=v[min1];
					++min1;
				}
				else
				{
					buffer[st++]=v[min2];
					++min2;
				}
			}
			else if(min2<=sf)
			{
				buffer[st++]=v[min2];
				++min2;
			}
			else
			{
				buffer[st++]=v[min1];
				++min1;
			}
		}
		for(register int i=st2;i<=sf;++i)
		{
			v[i]=buffer[i];
		}
	}
}

int main()
{
	fin>>n;
	for(register int i=1;i<=n;++i)
	{
		fin>>v[i];
	}
	fin.close();

	merge_sort(1,n);

	for(register int i=1;i<=n;++i)
	{
		fout<<v[i]<<" ";
	}
	fout.close();
	return 0;
}