Cod sursa(job #2753588)

Utilizator vlad.ulmeanu30Ulmeanu Vlad vlad.ulmeanu30 Data 23 mai 2021 15:50:02
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>

void soviet_sort (std::vector<int> &v) {
  if ((int)v.size() <= 1) return;
  if ((int)v.size() == 2) {
    if (v[0] > v[1]) std::swap(v[0], v[1]);
    return;
  }

  std::vector<int> ramasi, afara;
  ramasi.push_back(v[0]);
  for (int i = 1; i < (int)v.size(); i++) {
    if (ramasi.back() <= v[i]) ramasi.push_back(v[i]);
    else afara.push_back(v[i]);
  }

  soviet_sort(afara);
  std::merge(ramasi.begin(), ramasi.end(), afara.begin(), afara.end(), v.begin());
}

int main () {
  std::ifstream fin ("algsort.in");
  std::ofstream fout ("algsort.out");

  int n; fin >> n;
  std::vector<int> v(n);
  for (int i = 0; i < n; i++) fin >> v[i];

  std::mt19937 mt = std::mt19937();
  mt.seed(time(NULL));
  std::shuffle(v.begin(), v.end(), mt);

  soviet_sort(v);
  for (int i = 0; i < n; i++) fout << v[i] << ' ';

  fin.close();
  fout.close();
  return 0;
}