Mai intai trebuie sa te autentifici.

Cod sursa(job #1567521)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 13 ianuarie 2016 14:15:59
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#include <random>
#include <ctime>

#define MaxN 5000000

using namespace std;

int v[MaxN];

static inline int getRandom(void) {
   static mt19937 gen(time(0));
   int x = gen();
   return x < 0 ? -x : x;
}

void qSort(int st, int fn) {
   int b = st, e = fn;
   int pivot = v[getRandom() % (fn - st + 1) + st];
   while (b < e) {
      while (v[b] < pivot) {
         b++;
      }
      while (v[e] > pivot) {
         e--;
      }
      if (b <= e) {
         swap(v[b++], v[e--]);
      }
   }
   if (st < e) {
      qSort(st, e);
   }
   if (b < fn) {
      qSort(b, fn);
   }
}

int main() {
   freopen("algsort.in", "r", stdin);
   freopen("algsort.out", "w", stdout);
   int N;

   scanf("%d", &N);
   for (int i = 0; i < N; i++) {
      scanf("%d", &v[i]);
   }
   fclose(stdin);

   qSort(0, N - 1);

   for (int i = 0; i < N; i++) {
      printf("%d ", v[i]);
   }
   fclose(stdout);
   return 0;
}