Cod sursa(job #1490576)

Utilizator spatarelDan-Constantin Spatarel spatarel Data 23 septembrie 2015 20:11:00
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#include <cstring>

#include <algorithm>

const int MAX_N = 500000;

int N;
int V[MAX_N];

void quicksort(int *begin, int *end) {
  int n = end - begin;
  if (n > 1) {
    int pivot = rand() % n;
    std::swap(begin[pivot], begin[n - 1]);
    pivot = begin[n - 1];
    int *i = begin;
    for (int *it = begin; it < end - 1; ++it) {
      if (*it <= begin[n - 1]) {
        std::swap(*i, *it);
        ++i;
      }
    }
    std::swap(*i, begin[n - 1]);

    quicksort(begin, i);
    quicksort(i + 1, end);
  }
}

int main(void) {
    int i;

    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);

    // citirea datelor
    scanf("%d", &N);
    for (i = 0; i < N; ++i) {
        scanf("%d", &V[i]);
    }

    // calcularea solutiei
    quicksort(V, V + N);

    // afisarea solutiei
    for (i = 0; i < N; ++i) {
        printf("%d ", V[i]);
    }
    printf("\n");
    return 0;
}