Cod sursa(job #937119)

Utilizator lucian666Vasilut Lucian lucian666 Data 9 aprilie 2013 20:28:09
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb


#include<fstream>
#define NN 500009

#define in ios::in
#define out ios::out

using namespace std;
fstream g("algsort.out",out);


int v[NN] , n , x[NN] ;

void read();
void interclaseaza(int st , int mid , int dr );
void Msort(int st , int dr );
void wrs();

int main()
{
    read();
    Msort( 1 , n );
    wrs();

    return 0;
}

void read()
{
    fstream f("algsort.in",in);

    f >> n;
    for( int i=1 ; i<=n ; i++)
        f >> v[i];
}

void wrs()
{
    for( int i=1;  i<=n ; i++)
        g << v[i] << " ";
}

void Msort( int st , int dr )
{
    if( dr > st )
    {
        int mid = ( st + dr ) >> 1;
        Msort( st , mid );
        Msort( mid+1 , dr );
        interclaseaza( st , mid , dr );
    }
}

void interclaseaza( int st , int mid , int dr )
{
    int i = st , j = mid + 1 , m = 0;
    while( i<=mid && j<=dr )
        if ( v[i] < v[j] )
            x[++m] = v[i++];
            else
            x[++m] = v[j++];
    for(;i<=mid;i++)
        x[++m] = v[i];

    for(;j<=dr;j++)
        x[++m] = v[j];

    for( int i = st , j= 1; j<=m;j++)
        v[i++] = x[j];
}