Cod sursa(job #2798820)

Utilizator KarinaDKarina Dumitrescu KarinaD Data 11 noiembrie 2021 22:29:31
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>

using namespace std;

const int N = 500001;
int v [ N ];

void interclasare( int n, int m, int a [], int b [], int c [] ) {
    
    int i = 0, j = 0;
    
    while ( i < n && j < m ) {
        
        if ( a [ i ] < b [ j ] ) {
            c [ i + j ] = a [ i ];
            i++;
        }
        
        else {
            c [ i + j ]  = b [ j ];
            j++;
        }
    }
    
    while ( i < n ) {
        
        c [ i + j ] = a [ i ];
        i++;
    }
    
    while ( j < m ) {
        
        c [ i + j ] = b [ j ];
        j++;
    }
    
}

void mergesort( int v [], int n ) {
    
    if ( n == 1 )
        return;
    
    int i, n1, n2;
    
    n1 = n / 2;
    n2 = n - n1;
    
    int a [ n1 ], b [ n2 ];
    
    for ( i = 0; i < n1; i++ )
        a [ i ] = v [ i ];
    
    for ( i = 0; i < n2; i++ )
        b[ i ] = v [ n1 + i ];
    
    mergesort ( a, n1 );
    mergesort ( b, n2 );
    
    interclasare (n1, n2, a, b, v );
}

int main() {
    
    ifstream fin ( "algsort.in" );
    ofstream fout ( "algsort.out" );
    
    int n, i;
    
    fin >> n;
    
    for ( i = 0; i < n; i++ )
        fin >> v [ i ];
    
    mergesort( v, n );
    
    for ( i = 0; i < n; i++ )
        fout << v [ i ] << " ";
    
    return 0;
}