Cod sursa(job #480428)

Utilizator cont_de_testeCont Teste cont_de_teste Data 27 august 2010 18:26:30
Problema Sortare prin comparare Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 2.64 kb
type vec = array[0..500000] of longint ;
     vec1 = string[255] ;
var A : vec ;
    i, N, len, l : longint ;
    f : text ;
    x : vec1 ;
    Bufin : array[1..1 shl 17]of boolean;

    function parse ( var x : vec1 ; var a : longint ) : longint ;
    var i , y : longint;

    begin
            i := a; y := 0;

            while (i <= len) do
                begin
                    if ( x[i] >= '0' ) and ( x[i] <= '9' ) then
                        y := y * 10 + ord(x[i]) - 48
                    else
                        begin
                            if ( i = 255 ) then
                                begin
                                    a := 1 ; i := 0;
                                    read ( f, x ) ;
                                    len := length ( x ) ;
                                end ;
                            inc ( i ) ;
                            break;
                        end;

                    if ( i = 255 ) then
                         begin
                              a := 1 ; i := 0;
                              read ( f, x ) ;
                              len := length ( x ) ;
                         end ;

                    inc ( i ) ;

                end;

           a := i;
           parse := y;
    end;
    procedure quicksort ( var vector : vec ; st : longint ; dr : longint ) ;
        var temp, min, max, mij : longint ;

        begin
            mij := vector[st + (dr - st) div 2] ;
            min := st ; max := dr ;
            repeat
                while ( vector[min] < mij ) do
                    inc ( min ) ;
                while ( vector[max] > mij ) do
                    dec ( max ) ;
                if ( min <= max ) then
                    begin
                        temp := vector[min] ;
                        vector[min] := vector[max] ; inc ( min ) ;
                        vector[max] := temp ; dec ( max ) ;
                    end;
            until min > max ;

            if ( st < max ) then
                quicksort ( vector, st, max ) ;
            if ( dr > min ) then
                quicksort ( vector, min, dr ) ;
        end ;

   begin
     assign ( f, 'algsort.in' ) ; reset ( f ) ;
     SetTextBuf ( f, Bufin ) ;
     readln ( f, N ) ;
    // read ( f, x ) ; len := length ( x ) ; l := 1;
     for i := 1 to N do
         read ( f, A[i] ) ;//A[i] := parse ( x, l ) ;
     close ( f ) ;
     quicksort ( A, 1, N ) ;
     assign ( f, 'algsort.out' ) ; rewrite ( f ) ;
     //SetTextBuf ( f, Bufin ) ;
     for i := 1 to N do
         write ( f, A[i], ' ' ) ;
     close ( f ) ;
   end .