Cod sursa(job #2900138)

Utilizator alex_bb8Banilean Alexandru-Ioan alex_bb8 Data 10 mai 2022 14:10:31
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;

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

//ifstream f("D:/Proiecte/Clion/Projects/hashuri.in");
//ofstream g("D:/Proiecte/Clion/Projects/hashuri.out");

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

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(){

    f >> n;
    for(int i = 0; i < n; ++i)
        f >> v[i];

//    QuickSort(v, 0, n - 1);
    MergeSort(v, 0, n - 1);

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

    f.close();
    g.close();

    return 0;
}