Cod sursa(job #1841296)

Utilizator stefanmereutaStefan Mereuta stefanmereuta Data 5 ianuarie 2017 15:05:11
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
//mergesort
#include <iostream>
#include <fstream>

using namespace std;

#define MAX 500000

void merge(int v[], int st, int dr, int aux[]) {
    if (st == dr) {
        return;
    }

    int mid = (st + dr) / 2;
    int i = st, j = mid + 1, k = st;

    merge(v, st, mid, aux);
    merge(v, mid + 1, dr, aux);

    while (i <= mid && j <= dr) {
        if (v[i] <= v[j]) {
            aux[k++] = v[i++];
        } else {
            aux[k++] = v[j++];
        }
    }

    while (i <= mid) {
        aux[k++] = v[i++];
    }

    while (j <= dr) {
        aux[k++] = v[j++];
    }

    for (int i = st; i <= dr; i++) {
        v[i] = aux[i];
    }
}

int main()
{
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");

    int N, v[MAX], aux[MAX];

    fin >> N;

    for (int i = 0; i < N; i++) {
        fin >> v[i];
    }

    merge(v, 0, N - 1, aux);

    for (int i = 0; i < N; i++) {
        fout << v[i] << " ";
    }

    fin.close();
    fout.close();

    return 0;
}