Cod sursa(job #2703536)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 8 februarie 2021 18:42:28
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,v[500005],k;

void create_heap(int p)
{
    while(p/2 && v[p/2]<v[p])
    {
        swap(v[p/2],v[p]);
        p/=2;
    }

}

void heap_sort()
{
    swap(v[k],v[1]);

    k--;
    bool isheap=0;
    int i=1,st=2*i,dr=st+1;
    int poz=-1;

    while(st<=k && !isheap)
    {
        int mx=v[st];
        poz=st;

        if(dr<=k)
        {
            if(v[dr]>mx)
            {
                mx=v[dr];
                poz=dr;
            }
        }

        if(mx>v[i])
        {
            swap(v[i],v[poz]);
            i=poz;
            st=2*i;
            dr=st+1;
        }
        else
            isheap=1;


    }


}

int main()
{
    in>>n; k=n;
    for(int i=1;i<=n;i++)
    {
        in>>v[i];
        create_heap(i);
    }


    for(int i=1;i<=n-1;i++)
        heap_sort();

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


    return 0;
}