Cod sursa(job #2197548)

Utilizator osiaccrCristian Osiac osiaccr Data 22 aprilie 2018 14:34:51
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#define DEF 500010

using namespace std;

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

int n, A[DEF], B[DEF];


void divimp (int st, int dr, int A[], int B[]) {
    if (st < dr) {
        int mid = (st + dr) / 2;
        divimp (mid + 1, dr, A, B);
        divimp (st, mid, A, B);

        int i = st, j = mid + 1, k = 0;
        while (i <= mid and j <= dr) {
            if (A[i] < A[j]) {
                B[++ k] = A[i ++];
            }
            else {
                B[++ k] = A[j ++];
            }
        }

        while (i <= mid) {
            B[++ k] = A[i ++];
        }

        while (j <= dr) {
            B[++ k] = A[j ++];
        }

        for (int i = st, t = 1; i <= dr; ++ i, ++ t) {
            A[i] = B[t];
        }
    }
}

int main () {
    fin >> n;
    for (int i = 1; i <= n; ++ i) {
        fin >> A[i];
    }

    divimp (1, n, A, B);

    for (int i = 1; i <= n; ++ i) {
        fout << A[i] << " ";
    }

    return 0;
}