Cod sursa(job #1238718)

Utilizator fhandreiAndrei Hareza fhandrei Data 7 octombrie 2014 16:37:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
// FMI - Grupa 135 - Semigrupa 2 - Hareza Andrei
// Include
#include <fstream>
using namespace std;

// Constante
const int sz = 500001;

// Functii
void mergeSort(int left, int right);

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

int num;
int values[sz];
int temp[sz];

int main()
{
	in >> num;
	for(int i=1 ; i<=num ; ++i)
		in >> values[i];
	
	mergeSort(1, num);
	
	for(int i=1 ; i<=num ; ++i)
		out << values[i] << ' ';
	
	out << '\n';
	
	in.close();
	out.close();
	return 0;
}

void mergeSort(int left, int right)
{
	if(left == right)
		return;
	
	int mid = (left+right) / 2;
	
	mergeSort(left, mid);
	mergeSort(mid+1, right);
	
	int left1 = left, right1 = mid;
	int left2 = mid+1, right2 = right;
	
	int current = left-1;
	while(left1 <= right1 && left2 <= right2)
	{
		if(values[left1] < values[left2])
			temp[++current] = values[left1++];
		else
			temp[++current] = values[left2++];
	}
	
	while(left1 <= right1)
		temp[++current] = values[left1++];
	
	while(left2 <= right2)
		temp[++current] = values[left2++];
	
	for(int i=left ; i<=right ; ++i)
		values[i] = temp[i];
}