Cod sursa(job #1742434)

Utilizator AplayLazar Laurentiu Aplay Data 16 august 2016 14:17:20
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>

#define NMAX 500001

#define swapp(a, b) { int tmp = a; a = b; b = tmp; }

using namespace std;

int N, values[NMAX];

int partitionn(int* values, int left, int right) {
    int pivot = values[left + (right - left) / 2], i = left - 1, j = right + 1;

    while(1) {
        do ++i; while(values[i] < pivot);
        do --j; while(values[j] > pivot);
        if (i >= j) return j;
        swapp(values[i], values[j]);
    }
}

void quicksort(int* values, int left, int right) {
    if (left < right) {
        int pivotP = partitionn(values, left, right);
        quicksort(values, left, pivotP);
        quicksort(values, pivotP + 1, right);
    }
}

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

    scanf("%d", &N);
    for (int it = 0; it < N; ++it) {
        scanf("%d", &values[it]);
    }

    quicksort(values, 0, N - 1);

    for (int it = 0; it < N; ++it) printf("%d ", values[it]);

    return 0;
}