Cod sursa(job #2482579)

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

void merge_sort(vector<int> &a) {
  int m = a.size();

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

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

int main() {

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

  int n; cin >> n;

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

  merge_sort(a);

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

  return 0;
}