Cod sursa(job #2694619)

Utilizator corina_dimitriuDimitriu Corina corina_dimitriu Data 9 ianuarie 2021 23:18:15
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#define DMAX 500002

using namespace std;
ifstream fin("algosort.in");
ofstream fout("algosort.out");
int a[DMAX];
void BuildMaxHeap(int a[], int n);
void Heapify(int a[], int n, int poz);
//heap sort-maxheap
int main()
{
    int n,i,r;
    fin>>n;
    for(i=0;i<n;i++)
        fin>>a[i];

    BuildMaxHeap(a,n);

    r=n-1;
    while(r>0)
    {
        swap(a[r],a[0]);
        Heapify(a,r,0);
        r--;
    }

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

void BuildMaxHeap(int a[], int n)
{
    int i;
    for(i=n;i>n/2;i--)
        Heapify(a,n,i);
}

void Heapify(int a[], int n, int poz)
{
    int k,heap=0;
    while(poz*2+1<n&&!heap)
    {
        k=poz*2+1;
        if(k+1<n&&a[k+1]>a[k])
           k=k+1;
        if(a[poz]<a[k])
        {
            swap(a[poz],a[k]);
            poz=k;
        }
        else heap=1;
    }
}