Cod sursa(job #659111)

Utilizator irene_mFMI Irina Iancu irene_m Data 10 ianuarie 2012 01:14:24
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <cstdlib>
#include <vector>

using namespace std;

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

vector < int > a;
int N;

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

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

        do
            j--;
        while( a[ j ] > val );
        if( i < j )
            swap( a[ i ], a[ 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 = 0; i < N; ++i )
        fprintf( g, "%d ", a[ i ] );
}

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