Cod sursa(job #2482567)

Utilizator stormy_weatherelena cristina stormy_weather Data 28 octombrie 2019 16:07:35
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

#ifdef INFOARENA
ifstream cin("algsort.in");
ofstream cout("algsort.out");
#endif

vector<int> merge_sort(vector<int> &a) {
  int m = a.size();
  if (m == 0)
    return vector<int>();

  if (m == 1)
    return a;

  if (m > 1) {
    vector<int> a1 (a.begin(), a.begin() + m / 2);
    vector<int> a2 (a.begin() + m / 2, a.end());
    a1 = merge_sort(a1);
    a2 = merge_sort(a2);

    int i = 0, j = 0;
    vector<int> result;
    while (i < (int)a1.size() && j < (int)a2.size()) {
      if (a1[i] <= a2[j]) {
        result.push_back(a1[i]);
        i++;
      } else {
        result.push_back(a2[j]);
        j++;
      }
    }
    if (i < (int)a1.size()) {
      while (i < (int)a1.size()) {
        result.push_back(a1[i]);
        i++;
      }
    } else if (j < (int)a2.size()) {
      while (j < (int)a2.size()) {
        result.push_back(a2[j]);
        j++;
      }
    }
    return result;
  }
}

int main() {
  int n; cin >> n;

  vector<int> a(n);
  for (int i = 0; i < n; i++)
    cin >> a[i];

  a = merge_sort(a);

  for (int i = 0; i < n; i++)
    cout << a[i] << " ";
  cout << "\n";

  return 0;
}