Cod sursa(job #659109)

Utilizator irene_mFMI Irina Iancu irene_m Data 10 ianuarie 2012 01:08:06
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <cstdio>
#include <cstdlib>

const int MAX_N = 500002;
const char infile[] = "algsort.in";
const char outfile[] = "algsort.out";

int a[ MAX_N ];
int N;

void read(){
    FILE *f;
    f = fopen( infile, "rt" );
    fscanf( f, "%d", &N );
    for( int i = 1; i <= N; ++i )
        fscanf( f, "%d", &a[ i ] );
}

void swap( int i, int j ){
    int aux = a[ i ];
    a[ i ] = a[ j ];
    a[ j ] = aux;
}

int partition( int left, int right ){
    int i = left - 1, j = right + 1, val = a[ i + rand() % ( j - i + 1) ];
    while( 1 ){
        do
            i++;
        while( a[ i ] < val );

        do
            j--;
        while( a[ j ] > val );
        if( i < j )
            swap( i, j );
        else
            return j;
    }
}

void sort( int left, int right ){
    if( left < right ){
        int div = partition( left, right );
        sort( left, div );
        sort( div + 1, right );
    }
}

void write(){
    FILE *g;
    g = fopen( outfile, "wt" );
    for( int i = 1; i <= N; ++i )
        fprintf( g, "%d ", a[ i ] );
}

int main(){
    read();
    sort( 1, N );
    write();
    return 0;
}