Cod sursa(job #1005008)

Utilizator lucky1992Ion Ion lucky1992 Data 3 octombrie 2013 21:54:20
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

void Merge( int* A, int left, int mid, int right ){

	int* L = new int[mid-left+1];
	int* R = new int[right-mid];
	
	for( int i = 0; i < mid-left+1; i++ )
		L[i] = A[left+i];
	
	for( int i = 0; i < right - mid; i++ )
		R[i] = A[mid+i+1];
	
	int i = 0;
	int j = 0;
	int k = left;
	
	while( (i < mid - left + 1) && (j < right - mid ) ){
		if( L[i] < R[j] ){
			A[k] = L[i];
			k++;
			i++;
		}
		else{
			A[k] = R[j];
			k++;
			j++;
		}
	}
	
	while( i < mid - left + 1 ){
		A[k] = L[i];
		k++;
		i++;
	}
	
	while( j < right - mid ){
		A[k] = R[j];
		k++;
		j++;
	}
	
}

void MergeSort( int* A, int left, int right ){

	if( left < right ){
		int mid = left + (right-left)/2;
		MergeSort( A, left, mid );
		MergeSort( A, mid+1, right);
		Merge( A, left, mid, right );
	}
}

int main(){

	int N;
	int* A;
	
	in >> N;
	A = new int[N];
	
	for( int i = 0; i < N; i++ )
		in >> A[i];
	
	MergeSort( A, 0, N-1);
	
	for( int i = 0; i < N; i++ )
		out << A[i]<<" ";
	
	
	
	return 0;
	
}