Cod sursa(job #1009247)

Utilizator lucianRRuscanu Lucian lucianR Data 12 octombrie 2013 18:30:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#define L_MAX 5000000

using namespace std;

int n, v[L_MAX], c[L_MAX];

void mergee(int left, int right, int m)
{
    int l = left, r = m + 1, k = 0;
    while(l <= m && r <= right)
        if(v[l] < v[r])
            c[k++] = v[l++];
        else
            c[k++] = v[r++];
    while(l <= m)
            c[k++] = v[l++];
    while(r <= right)
            c[k++] = v[r++];
    for(int i = left; i <= right; i++)
        v[i] = c[i-left];
}

void merge_sort(int left, int right)
{
    int m;
    if(left < right)
    {
        m = (left + right) / 2;
        merge_sort(left, m);
        merge_sort(m+1, right);
        mergee(left, right, m);
    }
}

int main()
{
    ifstream in("algsort.in");
    ofstream out("algsort.out");
    in >> n;
    for(int i = 0; i <= n - 1; i++)
    {
        in >> v[i];
        c[i] = v[i];
    }
    merge_sort(0, n-1);
    for(int i = 0; i <= n - 1; i++)
        out << v[i] << " ";
    in.close();
    out.close();
    return 0;
}