Cod sursa(job #1490541)

Utilizator tudorcomanTudor Coman tudorcoman Data 23 septembrie 2015 19:16:14
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb

#include <stdio.h>

void quickswap(int &a, int &b) {
    a = a xor b;
    b = a xor b;
    a = a xor b;
}

void quicksort(int *begin, int *end) {
    int n = end - begin;

    if (n > 1) {
        //int pivot = begin[ n >> 1 ];
        quickswap(*begin, begin[n >> 1]);
        int *i = begin, *j = end - 1, d = 0;

        while(i < j) {
            if(*i > *j) {
                quickswap(*i, *j);
                d = 1 - d;
            }

            i += d;
            j -= 1 - d;
        }

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

const int MAX_N = 500000;
int v[MAX_N];
int main() {
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    int N;
    scanf("%d", &N);

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

    quicksort(v, v + N);

    for(register int i = 0; i < N; ++ i)
        printf("%d ", v[i]);

    printf("\n");
    return 0;
}