Cod sursa(job #2984141)

Utilizator corinarobuRobu Corina corinarobu Data 23 februarie 2023 17:19:38
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n, a[500001];
void merge(int arr[], int left, int mid, int r) {
  int nr_arr1 = mid - left + 1;
  int nr_arr2 = r - mid;

  int v1[nr_arr1], v2[nr_arr2],i = 0, j= 0, cnt;

  for (int i = 0; i < nr_arr1; i++)
    v1[i] = arr[left + i];
  for (int j = 0; j < nr_arr2; j++)
    v2[j] = arr[mid + j + 1];

  cnt = left;

  while (i < nr_arr1 && j < nr_arr2) {
    if (v1[i] <= v2[j]) {
      arr[cnt++] = v1[i];
      i++;
    } else {
      arr[cnt++] = v2[j];
      j++;
    }
  }

  while (i < nr_arr1) {
    arr[cnt++] = v1[i];
    i++;
  }

  while (j < nr_arr2) {
    arr[cnt++] = v2[j];
    j++;
  }
}

void mergeSort(int arr[], int left, int right) {
  if (left < right) {
    int m = (left+right)/2;

    mergeSort(arr, left, m);
    mergeSort(arr, m + 1, right);

    merge(arr, left, m, right);
  }
}

int main() {
  f>>n;
  for (int i=1;i<=n;i++)  f >> a[i];
  mergeSort(a,1,n);
  for (int i=1;i<=n;i++)  g << a[i] << " ";
  return 0;
}