Cod sursa(job #2901335)

Utilizator eduardpetrePetre Vasile-Eduard eduardpetre Data 13 mai 2022 16:36:58
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, v[500001], aux[500001];

void merge(int v[], int s, int d, int mid)
{
    int p = s, q = mid + 1, k = 1;

    while(p <= mid && q <= d)
        if(v[p] <= v[q])
            aux[k++] = v[p++];
        else if(v[p] > v[q])
            aux[k++] = v[q++];

    if(p <= mid){
        for(q = p;q <= mid; q++)
            aux[k++] = v[q];
    }
    else{
        for(p = q;p <= d; p++)
            aux[k++] = v[p];
    }

    k = 1;

    for(int u = s; u <= d; u++)
        v[u] = aux[k++];
}

void MergeSort(int v[], int s, int d)
{
    if((d - s) <= 1){
        if(v[s] > v[d])
            swap(v[s], v[d]);
    }
    else{
        int mid = (s + d)/2;
        MergeSort(v, s, mid);
        MergeSort(v, mid + 1, d);
        merge(v, s, d, mid);
    }
}

int main(){
    in >> n;
    for(int i = 0; i < n; ++i)
        in >> v[i];

    MergeSort(v, 0, n - 1);

    for(int i = 0; i < n; ++i)
        out << v[i] << ' ';

    in.close();
    out.close();

    return 0;
}