Cod sursa(job #1092875)

Utilizator fhandreiAndrei Hareza fhandrei Data 27 ianuarie 2014 15:14:55
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
// Include
#include <fstream>
#include <cstring>
using namespace std;

// Constante
const int sz = 1001;

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

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

int num;
int values[sz];

// Main
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] << ' ';
	
	in.close();
	out.close();
	return 0;
}

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