Cod sursa(job #449500)

Utilizator ncbllrNegrii Costin ncbllr Data 6 mai 2010 14:02:29
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include<iostream.h>
int a[1000000],x, v[1000000];

int cls(int *b, int *c,int n, int m, int *aa)
{   int i = 1 , j = 1, k =1;
	while((i <= n) || (j <= m))
	{
		if((i <= n) && (j <= m))
	    {
			if( b[i] <= c[j])  
				aa[k++] = b[i++];
			else
				aa[k++] = c[j++];
			continue;
     	}
		if (i <= n) 
			aa[k++]= b[i++];
		else 
			aa[k++] = c[j++];
		
	}	
	return 0;
}

int citire(int t,int *d)
{
	for(int i = 1; i <= t; i ++) scanf("%d ", &d[i]);
	
}		

void merge( int left, int right)
{
	if( left == right) return;
	if( left == right - 1)
	{
		if (v[left] > v[right])
			v[ left ] = v[ right ] ^ v[ left ] ^ ( v[ right ] = v[ left ] );
		return;
	
	}
	merge( left, (left + right) / 2);
	merge( ( left + right )/2 + 1, right);
	
	/*cout<<"intervalul : "<< left<<" "<< right<< " : ";
	for( int i = left; i <=  right ; ++i)
		cout<< v[ i ]<<" ";
	cout<<endl;*/
	
	int mij = left + right; mij /=2;
	cls( v + left - 1, v + mij , mij - left + 1, right - mij , a + left - 1);
	
	
	
	for( int i = left; i <= right; ++i)
		v[i]=a[i];
	
	/*for( int i = left; i <= right ; ++i)
		cout<< v[ i ]<<" ";
	cout<<endl;*/
}

int main()
{
	
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);
	
	scanf("%d ", &x);
	citire(x,v);
	merge(1, x);
	for(int i=1; i <= x;i++) printf("%d ", v[i]);
	return 0;
}