Cod sursa(job #664933)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 21 ianuarie 2012 11:29:38
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#include <vector>
#define NMAX 500005
using namespace std;

vector<int> v2;

int v[NMAX],n;

void read()
{
	freopen("algsort.in","r", stdin);
	freopen("algsort.out","w", stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&v[i]);
}
void solve(int left,int right)
{
	if(right<=left)
	{
		return;
	}
	int mid=(left+right)/2;
	solve(left,mid);
	solve(mid+1,right);
	int a1=left,b1=mid,a2=mid+1,b2=right;
	while(a1<=b1 && a2<=b2)
	{
		if(v[a1]<v[a2])
		{
			v2.push_back(v[a1]);
			a1++;
		}
		else
		{
			v2.push_back(v[a2]);
			a2++;
		}
		
	}
	while(a1<=b1)
	{
		v2.push_back(v[a1]);
		a1++;
	}
	while(a2<=b2)
	{
		v2.push_back(v[a2]);
		a2++;
	}
	for(unsigned int i=0;i<v2.size();i++)
	{
		v[left+i]=v2[i];		
	}
	v2.clear();
}
void print()
{
	for(int i=1;i<=n;i++) printf("%d ",v[i]);
}
int main()
{
	read();
	solve(1,n);
	print();
	return 0;
}