Cod sursa(job #2013542)

Utilizator workwork work work Data 21 august 2017 18:04:31
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

FILE *F=fopen("algsort.in", "r"), *G=fopen("algsort.out", "w");

int n, v[500005];

void merge_sort(int st, int mij, int dr)
{
    int i = st, j = mij+1, k = 0, w[500005];
    while(i <= mij && j <= dr)
        if(v[i] >= v[j])
            w[++ k] = v[j], j++;
        else
            w[++ k] = v[i], i++;
    while(i <= mij) w[++ k] = v[i], i++;
    while(j <= dr) w[++ k] = v[j], j++;

    for(i = 1; i <= k; ++ i)
        v[st+i-1] = w[i];
}

void Merge(int st, int dr)
{
    if(st < dr)
    {
        Merge(st, (st+dr)/2);
        Merge((st+dr)/2+1, dr);
        merge_sort(st, (st+dr)/2, dr);
    }
}

int main()
{
    fscanf(F, "%d ", &n);
    for(int i = 1; i <= n; ++i) fscanf(F, "%d ", &v[i]);
    Merge(1, n);
    for(int i = 1; i <= n; ++i) fprintf(G, "%d ", v[i]);
    return 0;
}