Cod sursa(job #3173979)

Utilizator vladimir.gavris.1Gavris Mihai Vladimir vladimir.gavris.1 Data 24 noiembrie 2023 07:58:37
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
// quicksort
#include <fstream>
#include <algorithm>

using namespace std;

#define MAXN 500000

int a[ MAXN ];

ifstream in( "algsort.in" );
ofstream out( "algsort.out" );

void quicks( int a[ ], int bg, int nd )
{
    int pivot, left, right, aux;
    pivot = a[ bg + rand() % ( nd - bg + 1 ) ];
    left = bg;
    right = nd;

    while( a[ left ] < pivot )
    {
        left++;
    }

    while( a[ right ] > pivot )
    {
        right--;
    }

    while( left < right )
    {
        aux = a[ left ];
        a[ left ] = a[ right ];
        a[ right ] = aux;

        do
        {
            left++;
        }
        while( a[ left ] < pivot );

        do
        {
            right--;
        }
        while( a[ right ] > pivot );
    }

    if( bg < right )
    {
        quicks( a, bg, right );
    }

    if( right + 1 < nd )
    {
        quicks( a, right + 1, nd );
    }
}

int main()
{
    int n, i;
    in >> n;

    for( i = 0; i < n; i++ )
    {
        in >> a[ i ];
    }

    quicks( a, 0, n - 1 );

    for( i = 0; i < n; i++ )
    {
        out << a[ i ] << " ";
    }
    return 0;
}