Cod sursa(job #1305956)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 30 decembrie 2014 13:07:05
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <cstdio>
#include <algorithm>
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#include <map>
#include <cstring>
#include <string>
#include <set>
#include <stack>
#include <deque>
#define pb push_back

#define mp make_pair
#define f first
#define s second
#define ll long long

using namespace std;


class Container {

  vector <int> data;
  int N;
  void qsort(int left, int right) {
    if (left >= right) {
      return ;
    }
    int piv = (left + right) / 2;
    int l = left, r = right;
    int val = data[piv];
    while(l < r) {
      while(data[l] < val) {
        l += 1;
      }
      while(data[r] > val) {
        r -= 1;
      }
      if (l < r) {
        swap(data[l], data[r]);
      }
      l += 1; r -= 1;
    }
    qsort(left, r);
    qsort(l, right);
  }
  public:
  Container() {N = 0;}
  void add_value(int x) {
    data.push_back(x);
    N += 1;
  }

  void sort_container() {
    qsort(0, N - 1);
  }

  friend ostream& operator << (std::ostream &stream, const Container& con) {
    for (auto el: con.data) {
      stream << el << " ";
    }
    return stream;
  }

};
int main() {
#ifndef ONLINE_JUDGE
  ifstream cin("algsort.in");
  ofstream cout("algsort.out");
#endif
  int N; cin >> N;
  Container lil_container;
  for (int i = 0; i < N; ++i) {
    int x; cin >> x;
    lil_container.add_value(x);
  }
  lil_container.sort_container();
  cout << lil_container;
  return 0;
}