Cod sursa(job #2856267)

Utilizator norryna07Alexandru Norina norryna07 Data 23 februarie 2022 17:26:18
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <algorithm>
#define N 500002
using namespace std;

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

int a[N], n;
int b[N];

void citire()
{
    fin>>n;
    for (int i=1; i<=n; ++i) fin>>a[i];
    fin.close(); 
}

void interclasare(int st, int mij, int dr)
{
    int i=st, j=mij+1;
    int k=0;
    while (i<=mij && j<=dr)
        if (a[i]<a[j]) b[++k]=a[i++];
        else b[++k]=a[j++];
    while (i<=mij) b[++k]=a[i++];
    while (j<=dr) b[++k]=a[j++];
    for (int i=1; i<=k; ++i)
        a[st+i-1]=b[i];
}

void mergesort(int st, int dr)
{
    if (dr-st<=1)
        {if (a[st]>a[dr]) swap(a[st], a[dr]);}
    else
    {
        int mij=(st+dr)/2;
        mergesort(st, mij);
        mergesort(mij+1, dr);
        interclasare(st, mij, dr);
    }

}

void afisare()
{
    for(int i=1; i<=n; ++i) fout<<a[i]<<' ';
    fout.close();
}

int main()
{
    citire();
    mergesort(1, n);
    afisare();
    return 0;
}