Cod sursa(job #365053)

Utilizator filipbFilip Cristian Buruiana filipb Data 17 noiembrie 2009 19:28:51
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
#include <stdlib.h>

int N, v[500024];

inline void swap(int *x, int *y)
{
    int aux = *x;
    *x = *y;
    *y = aux;
}

int partition(int *A, int l, int r)
{
    int x = A[l], i = l, j;
    
    for (j = l+1; j <= r; ++j)
        if (A[j] < x)
            swap(A+(++i), A+j);
            
    swap(A+l, A+i);
    return i;
}

void quicksort(int *A, int l, int r)
{
    if (l >= r)
        return ;
        
    int p = l + rand() % (r-l+1);
    swap(A+l, A+p);

    int m = partition(A, l, r);    
    quicksort(A, l, m);
    quicksort(A, m+1, r);
}

int main()
{
    int i;
    
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    
    scanf("%d", &N);
    for (i = 1; i <= N; ++i)
        scanf("%d", &v[i]);
        
    quicksort(v, 1, N);
    
    for (i = 1; i <= N; ++i)
        printf("%d ", v[i]);
    printf("\n");
        
    return 0;
}