Cod sursa(job #1599637)

Utilizator Paula-ElenaPaula-Elena Margarit Paula-Elena Data 14 februarie 2016 02:50:09
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
using namespace std;

const int MAXN = 500003;

int N, v[MAXN];

void readInput() {
    ifstream fin("algsort.in");

    fin >> N;
    for ( int i = 0; i < N; ++i )
        fin >> v[i];

    fin.close();
}

void mergeThem( int first, int mid, int last ) {
    int i = first;
    int j = mid + 1;
    int k = 0;
    int *aux = new int[last + 1 - first];

    while ( i <= mid && j <= last ) {
        if ( v[i] < v[j] )
            aux[k++] = v[i++];
        else
            aux[k++] = v[j++];
    }

    while ( i <= mid )
        aux[k++] = v[i++];
    while ( j <= last )
        aux[k++] = v[j++];

    for ( int i = first; i <= last; ++i )
        v[i] = aux[i-first];

    delete[] aux;
}

void mergesort( int first, int last ) {
    int mid = (first + last) >> 1;

    if ( first < last ) {
        mergesort( first, mid );
        mergesort( mid+1, last );
        mergeThem( first, mid, last );
    }
}

void writeOutput() {
    ofstream fout("algsort.out");

    for ( int i = 0; i < N; ++i )
        fout << v[i] << ' ';

    fout.close();
}

int main() {

    readInput();
    mergesort( 0, N-1 );
    writeOutput();

    return 0;
}