Cod sursa(job #1605176)

Utilizator robert.stefanRobert Stefan robert.stefan Data 18 februarie 2016 20:11:13
Problema Sortare prin comparare Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>

#define IN "algsort.in"
#define OUT "algsort.out"
#define NMAX 500001

int n, v[NMAX];

void read (void){
    int i;
    scanf ("%d", &n);
    for (i = 0; i < n; ++ i)
        scanf ("%d", &v[i]);
}

void print (void){
    int i;
    for (i = 0; i < n; ++i)
        printf ("%d ", v[i]);
}

inline void swap (int *a, int *b){
    int c = *a;
    *a = *b;
    *b = c;
}

void quickSort (int left, int right){
    int i = left, j = right, middle = (left + right) / 2;

    while (i <= j){
        while (v[i] < v[middle])
            ++ i;
        while (v[j] > v[middle])
            -- j;
        if (i <= j){
            swap (&v[i], &v[j]);
            ++ i;
            -- j;
        }
    }

    if (left < j)
        quickSort (left, j);
    if (i < right)
        quickSort (i, right);

}

int main(void){
    freopen (IN, "r", stdin);
    freopen (OUT, "w", stdout);

    read ();
    quickSort (0, n - 1);
    print ();

    fclose (stdin);
    fclose (stdout);
    return 0;
}