Cod sursa(job #855951)

Utilizator bogdan93Grigorescu Bogdan bogdan93 Data 15 ianuarie 2013 20:43:07
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include <cstdlib>

#define nr_max 500001

int a [ nr_max ] , N ;

void swap ( int &a , int &b )
{
    int aux = a ;
    a = b ;
    b = aux ;
}

int alegpiv( int l , int r )
{
	int piv ;
	piv = r ; l-- ;
	while ( 1 )
    {
        while ( a [ ++l ] < a [ piv ] && l < r ) ;
        while ( a [ --r ] > a [ piv ] && l < r ) ;
        if ( l < r )
            swap ( a [ l ] , a [ r  ] ) ;
            else goto here ;

	}
	here:
	swap ( a [ l ] , a [ piv ] ) ;
	return l ;
}

void qsort ( int l , int r )
{
	if( l >= r )	return;
	int m = alegpiv ( l , r ) ;
	qsort ( l , m-1 ) ;
	qsort ( m + 1 , r ) ;
}

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

    fscanf ( fin , "%d" , &N ) ;
    for ( int i = 1 ; i <= N ; i++ )
        fscanf ( fin , "%d " , a + i ) ;

    printf ( "\n" ) ;
    qsort ( 1 , N ) ;

    for ( int i = 1 ; i <= N ; i++ )
        fprintf ( fout , "%d " , a [ i ] ) ;

    fclose ( fin ) ;
    fclose ( fout ) ;

    return 0 ;
}