Cod sursa(job #3123453)

Utilizator mihai.constantinConstantin Mihai mihai.constantin Data 23 aprilie 2023 19:42:31
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
using namespace std;

int v[500001];
int r[500001];
int n;

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

void interclasare(int st, int dr) {
    int i = st; 
    int k = st;
    int m = (st+dr)/2; 
    int j = m + 1;

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

    while(i <= m) {
        r[k] = v[i];
        k++;
        i++;
    }

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

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

void divide(int st, int dr) {
    if(st == dr) {
        return;
    }

    int m = (st + dr) / 2;

    divide(st, m);
    divide(m + 1, dr);

    interclasare(st, dr);
}

int main()
{
    int i;
    
    in >> n; // nr elemente vector
    
    // citire elemente vector
    for(i = 1; i <= n; i++) {
        in >> v[i];
    }

    divide(1, n);

    for(i = 1; i <= n; i++) {
        out << v[i] << " ";
    }

    return 0;
}