Cod sursa(job #2075652)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 25 noiembrie 2017 16:29:11
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n, v[500000], m;
void citire()
{
    f>>n;
    for(int i=1;i<=n;++i)
        f>>v[i];
    f.close();
}
int parent (int i)
{
    return i/2;
}
int left (int i)
{
    return 2*i;
}
int right (int i)
{
    return 2*i+1;
}
void afisare ()
{
    for(int i=1;i<=n;i++)
        cout<<v[i]<<" ";
    cout<<endl;
}
void maxHeapify (int i)
{
    int l=left(i), r=right(i);
    int mx;
    if(l<=m && v[l]>v[i])
        mx=l;
    else
        mx=i;
    if(r<m && v[r]>v[mx])
        mx=r;
    if(mx!=i)
    {
        swap(v[i], v[mx]);
        maxHeapify(mx);
    }
}
void build()
{
    m=n;
    for(int i=m/2;i>=1;--i)
        maxHeapify(i);
}
void heapSort ()
{
    build();
    for(int i=n;i>=1;--i)
    {
        swap(v[1],v[i]);
        m--;
        maxHeapify(1);
    }
}
int main()
{
    citire();
    heapSort();
    for(int i=1;i<=n;i++)
        g<<v[i]<<" ";
    g.close();
}