Cod sursa(job #1246142)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 20 octombrie 2014 17:44:31
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

void mergesort(vector<int> & v, const int& left, const int& right) {
  if (left == right) {
    return;
  }
  int mid = left + (right - left)/2;
  mergesort(v, left, mid);
  mergesort(v, mid + 1, right);
  int i = left;
  int j = mid + 1;
  vector<int> merged;
  while (i <= mid && j <=right) {
    if (v[i] < v[j]) {
      merged.push_back(v[i++]);
    } else {
      merged.push_back(v[j++]);
    }
  }
  while (i <= mid) {
    merged.push_back(v[i++]);
  }
  while (j <= right) {
    merged.push_back(v[j++]);
  }
  for (int k = left; k <= right; ++k) {
    v[k] = merged[k - left];
  }
}

void sort(vector<int> &v) {
  mergesort(v, 0, v.size() - 1);
}

int main (int argc, char const *argv[]) {
  int n;
  vector<int> v;
  in>>n;
  for(int i = 0; i < n; ++i) {
    int x;
    in>> x;
    v.push_back(x);
  }
  sort(v);
  out<<"\n";
  for (const auto& nr : v) {
    out<<nr<<" ";
  }
  out<<"\n";
  return 0;
}