Cod sursa(job #3128847)

Utilizator Dragos13Dragos Dragos13 Data 11 mai 2023 09:02:11
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include <fstream>
using namespace std;
long long int v[500000];
void mergesort2(int stanga,int mijl,int dreapta) {
	int jumatate1_size = mijl - stanga + 1, jumatate2_size = dreapta - mijl;
	long long int* jumatate1 = new long long int[jumatate1_size];
	long long int* jumatate2 = new long long int[jumatate2_size];
	
	for (int i = 0; i < jumatate1_size; i++)
		jumatate1[i] = v[stanga + i];
	
	for (int i = 0; i < jumatate2_size; i++)
		jumatate2[i] = v[mijl + 1 + i];

	int jum1 = 0, jum2 = 0, index_merge = stanga;

	while (jum1 < jumatate1_size&&jum2<jumatate2_size)
	{

		if (jumatate1[jum1] <= jumatate2[jum2])
		{
			v[index_merge] = jumatate1[jum1];
			jum1++;
		}
		else
		{
			v[index_merge] = jumatate2[jum2];
			jum2++;
		}
		index_merge++;

	}

	while (jum1 < jumatate1_size) {
		v[index_merge] = jumatate1[jum1];
		jum1++;
		index_merge++;
	}

	while (jum2 < jumatate2_size) {
		v[index_merge] = jumatate2[jum2];
		jum2++;
		index_merge++;
	}
	delete[] jumatate1;
	delete[] jumatate2;
}
void mergesort1( int start, int final) {
	if (start >= final)
		return;
	int mijl = start + (final - start) / 2;
	mergesort1( start, mijl);
	mergesort1( mijl + 1, final);
	mergesort2( start, mijl, final);
	
}

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