Cod sursa(job #2685763)

Utilizator mihnea_buzoiuMihnea Buzoiu mihnea_buzoiu Data 17 decembrie 2020 17:39:56
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <stdio.h>
#include <string.h>

using namespace std;

int v[500001];
int t[500001];

void merge(int l, int mid, int r){
    int ll = l, rr = mid + 1, tt = 0;

    while (ll <= mid && rr <= r){
        if (v[ll] < v[rr]){
            t[tt] = v[ll];
            ll++;
        }
        else {
            t[tt] = v[rr];
            rr++;
        }
        tt++;
    }

    while (ll <= mid){
        t[tt] = v[ll];
        ll++;
        tt++;
    }

    while (rr <= r){
        t[tt] = v[rr];
        rr++;
        tt++;
    }

    for (int i=l; i<=r; i++)
        v[i] = t[i-l];
}

void mergesort(int l, int r){
    if (l == r)
        return;

    int mid = (l + r) / 2;
    mergesort(l, mid);
    mergesort(mid+1, r);

    merge(l, mid, r);
}

int main()
{
    int n;
    FILE * fin = fopen("algsort.in", "r");
    FILE * fout = fopen("algsort.out", "w");

    fscanf(fin, "%d", &n);
    for (int i=0; i<n; i++)
        fscanf(fin, "%d", &v[i]);

    mergesort(0, n-1);

    //merge(0, 10, 19);

    for (int i=0; i<n; i++)
        fprintf (fout, "%d ", v[i]);

    fclose(fout);
}

// 1 1 1 2 2 3 5 7 8 8 8 1 1 4 4 4 4 7 9 9