Cod sursa(job #1119600)

Utilizator BonCipBonciocat Ciprian Mircea BonCip Data 24 februarie 2014 18:47:26
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>

#define N_MAX 500000

int v[ N_MAX + 1 ];

void qsort( int beg, int end ) {
    if( end - beg > 1 ) {
        int piv = v[ ( beg * 3 + end * 5 ) / 8 ];
        int l = beg - 1, r = end;
        while( l < r ) {
            while( v[ ++ l ] < piv );
            while( v[ -- r ] > piv );
            if( l < r ) {
                int aux = v[ l ];
                v[ l ] = v[ r ];
                v[ r ] = aux;
            }
        }
        if( l <= ( beg + end ) / 2 ) {
            qsort( beg, l );
            qsort( l, end );
        } else {
            qsort( l, end );
            qsort( beg, l );
        }
    }
}

int main( ) {
    FILE * fin, * fout;
    fin = fopen( "algsort.in", "r" );
    fout = fopen( "algsort.out", "w" );

    int N;
    fscanf( fin, "%d", &N );

    int i;
    for( i = 1; i <= N; i ++ ) {
        fscanf( fin, "%d", v + i );
    }

    qsort( 1, N + 1 );

    for( i = 1; i <= N; i ++ ) {
        fprintf( fout, "%d ", v[ i ] );
    }

    fclose( fin );
    fclose( fout );
}