Cod sursa(job #2693640)

Utilizator daria.dulgheruDaria Dulgheru daria.dulgheru Data 6 ianuarie 2021 16:54:19
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#define dim 1001
using namespace std;

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

int v[dim];
int c[dim];

void inter(int st, int dr) {
    // a: 0 ... n-1
    // b: 0 ... m-1

    // st ... m ... dr

    // a: st .. m
    // b: m+1 ... dr

    int m = (st + dr)/2;

    int i = st; // pozitia de start pentru subvectorul a
    int j = m + 1; // pozitia de start pentru subvectorul b
    int k = st;
    while (i <= m && j <= dr){
        if(v[i] < v[j]) {
            c[k++] = v[i++];
        } else {
            c[k++] = v[j++];   
        }
    }

    while (i <= m){
        c[k++] = v[i++];
    }
    while (j <= dr){
        c[k++] = v[j++];   
    }

    // copiez c in v
    for (i = st; i <= dr; i++) {
        v[i] = c[i];
    }
}

void divide(int st, int dr) {
    int m;
    if (st == dr) {
        return;
    }
    m = (st + dr) / 2;
    divide(st, m);
    divide(m + 1, dr);
    inter(st, dr);
}

int main()
{
    int n;
    in >> n;
    for(int i = 0; i < n; i++) {
        in >> v[i];
    }
    divide(0, n-1);
    for (int i = 0; i < n; i++) {
        out << v[i] << " ";
    }
    out << '\n';
    
    return 0;
}