Cod sursa(job #3000165)

Utilizator AnaRosuAna Maria Rosu AnaRosu Data 12 martie 2023 01:37:35
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
// // O(nlogn)
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

void merge(int arr[], int left, int mid, int right)
{
	int n1 = mid - left + 1;
	int n2 = right - mid;

	int arr1[n1], arr2[n2];

	for (int i = 0; i < n1; i++)
		arr1[i] = arr[left + i];
	for (int j = 0; j < n2; j++)
		arr2[j] = arr[mid + 1 + j];

	int index1 = 0, index2 = 0; 
	int index3 = left; 

	while (index1 < n1 && index2 < n2) {
		if (arr1[index1] <= arr2[index2]) 
			arr[index3] = arr1[index1++];
		else 
			arr[index3] = arr2[index2++];
		index3++;
	}

	while (index1 < n1) {
		arr[index3] = arr1[index1++];
		index3++;
	}
	while (index2 < n2) {
		arr[index3] = arr2[index2++];
		index3++;
	}
}

void mergeSort(int arr[], int left, int right){
	if (left >= right)
		return; 

	int mid = left + (right - left) / 2;
	mergeSort(arr, left, mid);
	mergeSort(arr, mid + 1, right);
	merge(arr, left, mid, right);
}
// Driver code
int main(){
  int n;
  f>>n;

  int v[n];
  for(int i=0; i<n; ++i)
    f>>v[i];
  f.close();

  mergeSort(v,0,n-1);

  for(int i=0; i<n; ++i)
    g<<v[i]<<" ";
  g.close();
  return 0;
}