Cod sursa(job #2692782)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 3 ianuarie 2021 18:31:32
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>
int v[ 500000 ];

void intersectie( int v[], int st, int mij, int dr ){
    int left = st;
    int right = mij + 1;
    int a[ dr - st + 1 ], poz = 0;
    while( left <= mij && right <= dr )
        if( v[ left ] <= v[ right ] )
            a[ poz++ ] = v[ left++ ];
        else a[ poz++ ] = v[ right++ ];
    while( left <= mij )
        a[ poz++ ] = v[ left++ ];
    while( right <= dr )
        a[ poz++ ] = v[ right++ ];
    for( int i = st; i <= dr; i++ )
        v[ i ] = a[ i - st ];
}

void mergesort( int v[], int st, int dr ){
    if( st == dr )
        return;
    int mij = ( st + dr ) >> 1;
    mergesort( v, st, mij );
    mergesort( v, mij + 1, dr );
    intersectie( v, st, mij, dr );
}

int main()
{
    int n;
    FILE *fin = fopen( "algsort.in", "r" );
    fscanf( fin, "%d", &n );
    for( int i = 0; i < n; i++ )
        fscanf( fin, "%d", &v[ i ] );
    fclose( fin );
    mergesort( v, 0, n - 1 );
    FILE *fout = fopen( "algsort.out", "w" );
    for( int i = 0; i < n; i++ )
        fprintf( fout, "%d ", v[ i ] );
    fclose( fin );
    return 0;
}