Cod sursa(job #799765)

Utilizator cdascaluDascalu Cristian cdascalu Data 19 octombrie 2012 23:01:51
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<stdio.h>
#define Nmax 500001
int N,v[Nmax];
void read_data()
{
    FILE*f = fopen("algsort.in","r");
    fscanf(f,"%d",&N);
    for(int i=1;i<=N;++i)
        fscanf(f,"%d",&v[i]);
    fclose(f);
}
void write_data()
{
    FILE*g = fopen("algsort.out","w");
    for(int i=1;i<=N;++i)
        fprintf(g,"%d ",v[i]);

    fclose(g);
}
void swap(int&x,int&y)
{
    int aux = x;
    x = y;
    y = aux;
}
void show()
{
    for(int i=1;i<=N;++i)
        printf("%d ",v[i]);
    printf("\n");
}
int get_piv(int left, int right)
{
    int piv = (left+right)/2;
    swap(v[piv],v[right]);
    piv = right;
    --right;
    while(true)
    {
        while(v[left] < v[piv] && left < right)++left;
        while(v[right] > v[piv] && left < right)--right;

        if(left < right)
        {
            swap(v[left],v[right]);
        }
        else
            break;
    }
    swap(v[right],v[piv]);
    return right;
}
void qsort(int left,int right)
{
    if(left>=right)
        return;
    int piv = get_piv(left,right);
    //printf("%d\n",piv);
    //show();
    qsort(left,piv-1);
    qsort(piv+1,right);
}
int main()
{
    read_data();
    qsort(1,N);
    write_data();

    return 0;
}