Cod sursa(job #412313)

Utilizator marius135Dumitran Adrian Marius marius135 Data 5 martie 2010 14:46:26
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
/* sortare prin interclasare, 
    Pornim cu un vector mare nesortat si il tot impartim in 2 jumatati. Facem acest lucru pana jaungem la bucatele mici 
pe care le sortam usor. Apoi interclasam bucatelele sortate pt  a obtine zone sortate din ce in ce mai mari.


*/
#include<stdio.h>
#include<iostream.h>
#define maxn 1024 * 512
int vec[ maxn], temp[maxn];
int n;

void merge( int left, int middle, int right)
{
	for( int a1 = left, a2 = middle+1, i = left; i <= right; ++i)
	{
		if( a1 > middle)
		{
			temp[i] = vec[a2++];
			continue;
		}
		if( a2 > right)
		{
			temp[i] = vec[a1++];
			continue;
		}
		if( vec[a1] < vec[ a2 ])
		{
			temp[i] = vec[a1++];
			continue;
		}
		temp[i] = vec[ a2++];
	}
	for( int i = left; i <= right; ++i)
		vec[i] = temp[i];
}

void merge_sort( int left, int right)
{
	if( right - left <= 1)
	{
		if( vec[left] > vec[ right] )
			vec[ right ] = vec[left] - vec[right] + ( vec[left] = vec[right]);
		return ;
	}
	merge_sort( left, (left + right)/2);
	merge_sort( ( left + right)/2 + 1, right);
	merge( left, ( left + right)/2, right);
}

int main()
{
	freopen("algsort.in","r",stdin); freopen("algsort.out","w",stdout);
	
	scanf("%d",&n);
	//cin>>n;
	
	for( int i = 1; i <= n; ++i)
	{
		scanf("%d",&v[i]);
		//cin>>vec[i];
	}
	
	//merge_sort(1,n);
	for( int i = 1; i < n; ++i)
		printf("%d ",vec[i]);
	printf("%d\n",vec[n]);
	return 0;
}