Cod sursa(job #1541819)

Utilizator mariusn01Marius Nicoli mariusn01 Data 4 decembrie 2015 16:23:06
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
// merfesort(sortare prin interclasare) o(n log n) timp
// o(n) de 2 ori memorie

#include <fstream>

using namespace std;

int n, i, x;
int v[500010], w[500010];

void interclaseaza(int st, int mid, int dr) {
    int i = st;
    int j = mid+1;
    int k = st-1;
    while (i<=mid && j<=dr) {
        if (v[i] < v[j]) {
            k++;
            w[k] = v[i];
            i++;
        } else {
            k++;
            w[k] = v[j];
            j++;
        }
    }

    for (;i<=mid;i++)
        w[++k] = v[i];
    for (;j<=dr;j++)
        w[++k] = v[j];
    for (i=st;i<=dr;i++)
        v[i] = w[i];
}

void sorteaza(int st, int dr) {
    if (st < dr) {
        int mid = (st + dr)/2;
        sorteaza(st, mid);
        sorteaza(mid+1, dr);
        interclaseaza(st, mid, dr);
    }
}

int main () {

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

    fin>>n;
    // numaram de cate ori apare fiecare valoare
    for (i=1;i<=n;i++) {
        fin>>v[i];
    }

    sorteaza(1, n);

    for (i=1;i<=n;i++)
        fout<<v[i]<<" ";

    return 0;
}