Cod sursa(job #3133346)

Utilizator Bogdan_CppBogdan Bogdan_Cpp Data 25 mai 2023 14:47:25
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");
void merge(int arr[], int st, int mij, int dr)
{
	int i, j, k;
	int n1 = mij - st + 1;
	int n2 = dr - mij;

	int ST[n1], DR[n2];

	for (i = 0; i < n1; i++)
		ST[i] = arr[st + i];
	for (j = 0; j < n2; j++)
		DR[j] = arr[mij + 1 + j];

	i = 0;
	j = 0;
	k = st;

	while (i < n1 && j < n2) {
		if (ST[i] <= DR[j]) {
			arr[k] = ST[i];
			i++;
		}
		else {
			arr[k] = DR[j];
			j++;
		}
		k++;
	}

	while (i < n1) {
		arr[k] = ST[i];
		i++;
		k++;
	}

	while (j < n2) {
		arr[k] = DR[j];
		j++;
		k++;
	}
}

void mergeSort(int arr[], int st, int dr)
{
	if (st < dr) {
		int mij = st + (dr - st) / 2;
		mergeSort(arr, st, mij);
		mergeSort(arr, mij + 1, dr);

		merge(arr, st, mij, dr);
	}
}

void printArray(int A[], int n)
{
	int i;
	for (i = 0; i < n; i++)
		out<<A[i]<<" ";
}


int main()
{
	int arr[500001];
	int n;
   in>>n;
   for (int i = 0; i < n; i++)
   {
      in>>arr[i];
   }
   mergeSort(arr, 0, n - 1);

	printArray(arr, n);
	return 0;
}