Cod sursa(job #2439745)

Utilizator vlad.ulmeanu30Ulmeanu Vlad vlad.ulmeanu30 Data 16 iulie 2019 19:12:10
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
#define lll long long
#define pii pair<int,int>
#define pll pair<lll,lll>
#define fi first
#define se second
#define vi vector<int>
#define pb push_back
#define sz(a) (int)(a).size()
#define inf (INT_MAX/2-1)
#define infl (1LL<<61)
#define aaa system("pause");
#define dbg(x) cerr<<(#x)<<' '<<(x)<<'\n',aaa
#define dbga(x,n) cerr<<(#x)<<"[]: ";for(int _=0;_<=n;_++) cerr<<x[_]<<" ";cerr<<'\n'; aaa

using namespace std;

vi v;

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

vi operator + ( vi a, vi b )
{
  for (int x: b) a.pb(x);
  return a;
}

void qqsort ( vi &v )
{
  int n = sz(v), mid = n / 2, amt = 0;
  if (n <= 1) return;
  for (int x: v) amt += (x == v[mid]);
  vi sml, big, tim(amt, v[mid]);
  for (int x: v)
    if (x < v[mid]) sml.pb(x);
    else if (x > v[mid]) big.pb(x);
  qqsort (sml);
  qqsort (big);
  v = sml + tim + big;
}

int main ()
{
  int n; fin >> n;
  int i, j, z;
  for (i = 0; i < n; i++ ) fin >> z, v.pb(z);
  random_shuffle(v.begin(), v.end());
  qqsort (v);
  for (int z: v) fout << z << ' ';
  fin.close(); fout.close();
  return 0;
}