Cod sursa(job #1957104)

Utilizator openbvehuKovacs Tamas openbvehu Data 7 aprilie 2017 12:38:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

void osszefesules(int bal[], int jobb[], int t[], int nb, int nj){
    int i = 0, j = 0, k = 0;
    while(i < nb && j < nj){
        if(bal[i] < jobb[j]){
            t[k] = bal[i];
            i++;
            k++;
        }
        else{
            t[k] = jobb[j];
            j++;
            k++;
        }
    }
    while(i < nb){
        t[k] = bal[i];
        i++;
        k++;
    }
    while(j < nj){
        t[k] = jobb[j];
        j++;
        k++;
    }
}

void rendez(int t[], int n){
    if(n < 2)
        return;
    int k = n / 2;
    int *bal, *jobb;
    bal = (int*)malloc(k * sizeof(int));
    jobb = (int*)malloc((n - k) * sizeof(int));
    int i;
    for(i = 0; i < k; i++)
        bal[i] = t[i];
    for(i = k; i < n; i++)
        jobb[i-k] = t[i];
    rendez(bal, k);
    rendez(jobb, n-k);
    osszefesules(bal, jobb, t, k, n-k);
    free(bal);
    free(jobb);
}

int main()
{
    int iter, h, *tomb;
    f >> h;
    tomb = (int*)malloc(h * sizeof(int));
    for(iter = 0; iter < h; iter++)
        f >> tomb[iter];
    rendez(tomb, h);
    for(iter = 0; iter < h; iter++)
        g << tomb[iter] << " ";
    free(tomb);
    return 0;
}