Cod sursa(job #2534086)

Utilizator DavidLDavid Lauran DavidL Data 30 ianuarie 2020 09:13:30
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");

const int NMAX = 5e5 + 5;

int n, x[NMAX], b[NMAX];

void mergeSir(int st, int dr) {
   int mij = (st + dr) / 2;
   // sortat pe [st, mij] si [mij + 1, dr]; le mergez

   int poz1 = st, poz2 = mij + 1;
   int k = 0;
   while (poz1 <= mij || poz2 <= dr) {
      if (poz2 > dr || (x[poz1] <= x[poz2] && poz1 <= mij)) {
         b[++k] = x[poz1];
         poz1++;
      }
      else {
         b[++k] = x[poz2];
         poz2++;
      }
   }
   for (int i = st; i <= dr; i++)
      x[i] = b[i - st + 1];
}

void mergesort(int st, int dr) {
   if (st == dr)
      return;

   int mij = (st + dr) / 2;
   mergesort(st, mij);
   mergesort(mij + 1, dr);

   mergeSir(st, dr);
}

int main()
{
   fi >> n;
   for (int i = 1; i <= n; i++)
      fi >> x[i];

   mergesort(1, n);

   for (int i = 1; i <= n; i++)
      fo << x[i] << " ";

   return 0;
}