Cod sursa(job #865499)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 26 ianuarie 2013 16:27:46
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#include <ctime>
#include <cstdlib>
 
const int MAX_SIZE(500000);
 
int v [MAX_SIZE];
int n;
 
inline void read (void)
{
    std::freopen("algsort.in","r",stdin);
    std::scanf("%d",&n);
    for (int *iterator(v), *end(v + n) ; iterator < end ; ++iterator)
        std::scanf("%d",iterator);
    std::fclose(stdin);
}
 
inline void print (void)
{
    std::freopen("algsort.out","w",stdout);
    for (int *iterator(v), *end(iterator + n) ; iterator < end ; ++iterator)
        std::printf("%d ",*iterator);
    std::putchar('\n');
    std::fclose(stdout);
}
 
void swap (int a, int b)
{
    int temp(v[a]);
    v[a] = v[b];
    v[b] = temp;
}
 
void quicksort (int left, int right)
{
    int pivot(v[left + (std::rand() % (right - left + 1))]), i(left), j(right);
    while (i < j)
    {
        while (v[i] < pivot)
            ++i;
        while (v[j] > pivot)
            --j;
        if (i <= j)
        {
            swap(i,j);
            ++i;
            --j;
        }
    }
    if (left < j)
        quicksort(left,j);
    if (right > i)
        quicksort(i,right);
}
 
int main (void)
{
    read();
    std::srand(std::time(0));
    quicksort(0,n - 1);
    print();
    return 0;
}