Cod sursa(job #1851800)

Utilizator AurelGabrielAurel Gabriel AurelGabriel Data 20 ianuarie 2017 09:05:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <cstring>

using namespace std;

int n;
int a[500000];

void mrg(int* v1, int sz1, int* v2, int sz2)
{
    int i = 0;
    int j = 0;
    int s = 0;

    int temp[sz1+sz2];

    while(i < sz1 && j < sz2)
        if(v1[i] < v2[j])
        {
            temp[s] = v1[i];
            s++;
            i++;
        }
        else
        {
            temp[s] = v2[j];
            s++;
            j++;
        }

    while(i < sz1)
    {
        temp[s] = v1[i];
        s++;
        i++;
    }

    while(j < sz2)
    {
        temp[s] = v2[j];
        s++;
        j++;
    }

    memcpy(v1, temp, s * sizeof(int));
}

void merge_sort(int* v, int sz)
{
    if(sz == 1)
        return;

    merge_sort(v, sz/2);
    merge_sort(v + sz/2, sz - sz/2);

    mrg(v, sz/2, v+sz/2, sz - sz/2);
}

int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");

    f >> n;
    for(int i = 0; i < n; i++)
        f >> a[i];

    merge_sort(a, n);

    for(int i = 0; i < n; i++)
        g << a[i] << ' ';

    return 0;
}