Cod sursa(job #3128862)

Utilizator HefaSteopoaie Vlad Hefa Data 11 mai 2023 10:31:52
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <vector>

using namespace std;

int *v;

void MergeSort(int st, int dr)
{
  int m = (st + dr) / 2;
  if (st == dr)
  {
    return;
  }
  if (st + 1 == dr)
  {
    if (v[st] > v[dr])
    {
      int aux = v[st];
      v[st] = v[dr];
      v[dr] = aux;
    }
    return;
  }
  MergeSort(st, m);
  MergeSort(m + 1, dr);
  vector<int> interclasare;
  int k1 = st, k2 = m + 1;
  while (k1 <= m && k2 <= dr)
  {
    if (v[k1] < v[k2])
      interclasare.push_back(v[k1++]);
    else
      interclasare.push_back(v[k2++]);
  }
  while(k1 <= m)
    interclasare.push_back(v[k1++]);
  while(k2 <= dr)
    interclasare.push_back(v[k2++]);

  for (int i = st; i <= dr; i ++)
    v[i] = interclasare[i - st];
}

int main()
{
  int n;
  cin >> n;
  v = new int[n];
  for (int i = 0; i < n; i ++)
    cin >> v[i];
  MergeSort(0, n - 1);
  for (int i = 0; i < n; i ++)
    cout << v[i] << " ";
  return 0;
}