Cod sursa(job #1005017)

Utilizator lucky1992Ion Ion lucky1992 Data 3 octombrie 2013 22:09:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 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 = left;
	int j = mid+1;
	int k = left;
	
	int b[500001];
	while( (i <= mid) && (j <= right ) ){
		if( A[i] < A[j] ){
			b[k] = A[i];
			k++;
			i++;
		}
		else{
			b[k] = A[j];
			k++;
			j++;
		}
	}
	
	while( i <= mid  ){
		b[k] = A[i];
		k++;
		i++;
	}
	
	while( j <= right ){
		b[k] = A[j];
		k++;
		j++;
	}
	
	for( int i = left; i <= right; i++ )
		A[i] = b[i];
	
}

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

	if( left < right ){
		int mid = left + ( (right-left)>>1 );
		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;
	
}