Cod sursa(job #2828098)

Utilizator TudosieRazvanTudosie Marius-Razvan TudosieRazvan Data 6 ianuarie 2022 20:42:22
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <unordered_map>
#include <cstring>
#include <climits>

#define NMAX 2000003
using namespace std;

int n;
int v[500003];

ifstream fin("algsort.in");
ofstream fout("algsort.out");

void merge_sort(int st, int dr)
{
	if (st == dr)
	{
		return;
	}
	else {
		int mij = (st + dr) / 2;
		merge_sort(st, mij);
		merge_sort(mij + 1, dr);

		//fac interclasare
		vector<int>val;
		int  k1 = st, k2 = mij+1;
		while (k1 <= mij && k2 <= dr)
		{
			if (v[k1] <= v[k2])
			{
				val.push_back(v[k1]);
				k1++;
			}
			else {
				val.push_back(v[k2]);
				k2++;
			}
		}

		while (k1 <= mij)
		{
			val.push_back(v[k1]);
			k1++;
		}
		while (k2 <= dr)
		{
			val.push_back(v[k2]);
			k2++;
		}
		for (int i = 0; i < val.size(); i++)
		{
			v[st + i] = val[i];
		}
	}
}

int main()
{
	fin >> n;
	for (int i = 1; i <= n; i++)
	{
		fin >> v[i];
	}
	merge_sort(1, n);
	for (int i = 1; i <= n; i++)
	{
		fout << v[i]<<" ";
	}
	return 0;
}