Cod sursa(job #2975455)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 6 februarie 2023 16:15:44
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <vector>
#include <memory>
#include <algorithm>

using namespace std;

class Solver{
private:
  void mergeSort(const typename vector<int>::iterator& begin,
		 const typename vector<int>::iterator& end) {
    if (distance(begin, end) == 1)
      return;
    
    int middleDist = distance(begin, end) / 2;

    mergeSort(begin, begin + middleDist);
    mergeSort(begin + middleDist, end);

    inplace_merge(begin, begin + middleDist, end);
  }
  void mergeSort(vector<int> &v) {
    if (v.empty())
      return;
    mergeSort(v.begin(), v.end());
  }
public:
  Solver() {
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
  }
  ~Solver() {
    fclose(stdin);
    fclose(stdout);
  }
  void sortArray() {
    int N;
    scanf("%d", &N);
    vector<int> v(N);
    for (int i = 0; i < N; ++i)
      scanf("%d", &v[i]);
    mergeSort(v);
    for (auto it: v)
      printf("%d ", it);
    printf("\n");
  }
};

int main() {
  unique_ptr<Solver> s = make_unique<Solver>();
  s->sortArray();
  return 0;
}