Cod sursa(job #970045)

Utilizator AndupkIonescu Alexandru Andupk Data 5 iulie 2013 21:27:10
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>

using namespace std;

void merge_sort(int a[] , int n);
void Merge_sort(int a[] , int left , int right);
void Merge(int a[] , int left , int mid , int right);


void merge_sort(int a[] , int n)
{
	Merge_sort(a , 0 , n-1);
}

void Merge_sort(int a[] , int left , int right)
{
	

	if(left < right){
		int mid = (left + right) / 2;
		Merge_sort(a , left , mid );
		Merge_sort(a , mid + 1 , right);
		Merge( a , left , mid , right );
	}
}

void Merge(int a[] , int left , int mid , int right)
{
	mid++;
	int aux = mid , i=left , j ,aux2=left;
	int temp[500001];
	
	while( left < aux && mid <= right ) {
		
		if(a[left] > a[mid] ){
			temp[i] = a[mid];
			mid++;
		}
		else {
			temp[i] = a[left];
			left++;
		}
		
		i++;
		
	}	

	if(left < aux)
		for(j=i; j<=right; j++){
			temp[j]=a[left];
			left++;
		}
	else
		for(j=i; j<=right; j++){
			temp[j]=a[mid];
			mid++;
		}	
	
	for(i=aux2;i<=right;i++)
		a[i]=temp[i];
	
}

int main()
{
	int n , a[500001];
	
	ifstream in("algsort.in"); 
	ofstream out("algsort.out");
	
	in>>n;
	for(int i=0; i<n; ++i)
		in>>a[i];
	
	merge_sort(a,n);

	for(int i=0; i<n; ++i)
		out<<a[i]<<" ";
	
	return 0;
}