Cod sursa(job #1985216)

Utilizator Mihai_PredaPreda Mihai Dragos Mihai_Preda Data 27 mai 2017 10:25:27
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>

using namespace std;

const int nMax = 500005;

int n;
int v[nMax];

void citire()
{
    ifstream in("algsort.in");
    in >> n;
    for(int i = 1; i <= n; ++i)
        in >> v[i];
    in.close();
}

void merge_sort(int st, int dr)
{
    static int a[nMax];
    if(st == dr)
        return;
    int mid = (st + dr) / 2;
    merge_sort(st, mid);
    merge_sort(mid + 1, dr);

    for(int i = st; i <= dr; ++i)
        a[i] = v[i];
    int ind1 = st;
    int ind2 = mid + 1;
    int i;
    for(i = st; i <= dr && ind1 <= mid && ind2 <= dr; ++i)
    {
        if(a[ind1] < a[ind2])
            v[i] = a[ind1++];
        else
            v[i] = a[ind2++];
    }
    while(ind1 <= mid)
        v[i++] = a[ind1++];
    while(ind2 <= dr)
        v[i++] = a[ind2++];
}

void afisare()
{
    ofstream out("algsort.out");
    for(int i = 1; i <= n; ++i)
        out << v[i] << " ";
    out.close();
}

int main()
{
    citire();
    merge_sort(1, n);
    afisare();
    return 0;
}