Cod sursa(job #2065125)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 13 noiembrie 2017 13:56:09
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <vector>
using namespace std;

void merge(vector<int>& v, int left, int mid, int right)
{
	int i = left, j = mid + 1;
	vector<int> temp;
	
	while(i <= mid && j <= right)
	{
		if(v[i] <= v[j])
		{
			temp.push_back(v[i]);
			++i;
		}
		else
		{
			temp.push_back(v[j]);
			++j;
		}
	}
	
	while(i <= mid)
	{
		temp.push_back(v[i]);
		++i;
	}
	while(j <= right)
	{
		temp.push_back(v[j]);
		++j;
	}
	for(int i = left;i <= right;++i)
	{
		v[i] = temp[i - left];
	}
}

void srt(vector<int>& v, int left, int right)
{
	if(left >= right)
	{
		return;
	}
	
	int mid = left + (right - left) / 2;
	srt(v, left, mid);
	srt(v, mid + 1, right);
	merge(v, left, mid, right);
}

int main()
{
	ifstream in("algsort.in");
	ofstream out("algsort.out");
	
	int n;
	in >> n;
	vector<int> v(n);
	
	for(int i = 0;i < n;++i)
	{
		in >> v[i];
	}
	srt(v, 0, v.size() - 1);
	
	for(int i = 0;i < n - 1;++i)
	{
		out << v[i] << " ";
	}
	out << v[n - 1] << "\n";
	in.close();
	out.close();
}