Cod sursa(job #3154433)

Utilizator proflaurianPanaete Adrian proflaurian Data 4 octombrie 2023 17:47:31
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
/// #include <bits/stdc++.h>

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N = 500010;
int n,a[N],b[N];
void mergeSort(int st,int dr)
{
    /// st = indicele stanga al intervalului pe care il sortez
    /// dr = indicele dreapta al intervalului pe care il sortez
    if(st==dr)
        return; /// un interval de lungime 1 nu are nevoie sa fie sortat

    int mi=(st+dr)/2;/// impart [st,dr] in [st,mi] si [mi+1,dr]

    mergeSort(st,mi);/// recursiv sortez prima jumatate
    mergeSort(mi+1,dr);/// recursiv sortez a doua jumatate

    /// ramane sa interclasam cele doua jumatati

    for(int i=st;i<=dr;i++)
        b[i]=a[i];/// copiem cele doua zone sortate pe vectorul ajutator

    int i=st,j=mi+1,k=st-1;

    while(i<=mi && j<=dr)
    {
        k++;
        if(b[i]<=b[j])
        {
            a[k]=b[i];
            i++;
        }
        else
        {
            a[k]=b[j];
            j++;
        }
    }

    while(i<=mi)
    {
        k++;
        a[k]=b[i];
        i++;
    }

    while(j<=dr)
    {
        k++;
        a[k]=b[j];
        j++;
    }
}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>a[i];

    mergeSort(1,n);

    for(int i=1;i<=n;i++)
        g<<a[i]<<' ';
    return 0;
}