Cod sursa(job #1717224)

Utilizator andreiSevastreAndrei Sevastre andreiSevastre Data 14 iunie 2016 16:13:54
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#define MAXN 500001
using namespace std;

int v[MAXN], w[MAXN];

void merge ( int a, int b)
{
	if(a==b)
		return;
	
	merge(a, (a+b)/2);
	merge((a+b)/2 + 1, b);
	
	
	int p1=a;
	int p2=(a+b)/2 + 1;
	memset(w, 0, sizeof(w));
	for( ; p1 <= (a+b)/2 || p2 <= b; )
	{ 
		if((p2 > b) || v[p1] <= v[p2] && p1 <= (a+b)/2)
		{
			w[++w[0]] = v[p1];
			p1++;
			continue;
		}
		if((p1 > (a + b) / 2) || v[p1] > v[p2] && p2 <= b)
		{
			w[++w[0]] = v[p2];
			p2++;
		}
	}
	
	for(int i=1;i<=w[0];i++)
	{
		v[a+i-1] = w[i];
	}

}




int main ()
{
	int n;
	
	freopen ("algsort.in" , "r", stdin);
	freopen ("algsort.out" , "w", stdout);
	
	cin>>n;
	
	for(int i=1;i<=n;i++)
		cin>>v[i];
	
	
	merge (1,n);
	
	for(int i=1;i<=n;i++)
		cout<<v[i]<<" ";
	
	
	cout<<endl;
	
	
	return 0;
}