Cod sursa(job #1702090)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 14 mai 2016 15:06:29
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 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 m_sort(vector<int>& v, int left, int right)
{
	if(left >= right)
	{
		return;
	}
	
	int mid = left + (right - left) / 2;
	
	m_sort(v, left, mid);
	m_sort(v, mid + 1, right);
	merge(v, left, mid, right);
}

void merge_sort(vector<int>& v)
{
	int N = v.size();
	
	m_sort(v, 0, N - 1);
}

int main()
{
	ifstream in("algsort.in");
	ofstream out("algsort.out");
	
	int N;
	in >> N;
	
	vector<int> v;
	for(int i = 0;i < N;++i)
	{
		int nr;
		in >> nr;
		v.push_back(nr);
	}
	
	merge_sort(v);
	for(int i = 0;i < N;++i)
	{
		out<<v[i]<<" ";
	}
	
	in.close();
	out.close();
}