Cod sursa(job #2146100)

Utilizator gabib97Gabriel Boroghina gabib97 Data 27 februarie 2018 19:48:55
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>

#define N 500001

using namespace std;

int n, a[N];

void quicksort(int *a, int *b) {
    int n = b - a + 1;
    if (n < 2) return;

    int p = rand() % n, v = a[p];

    int i = 0, j = n - 1;

    while (i < j) {
        while (a[i] < v && i < j) i++;
        while (a[j] > v && j > i) j--;

        if (i >= j) break;
        swap(a[i], a[j]);

        if (a[i] == v) j--;
        else i++;
    }

    quicksort(a, a + i - 1);
    quicksort(a + j + 1, b);
}

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

    scanf("%i", &n);
    for (int i = 0; i < n; i++) scanf("%i", &a[i]);

    srand(time(NULL));
    quicksort(a, a + n - 1);

    for (int i = 0; i < n; i++)
        printf("%i ", a[i]);
    return 0;
}