Cod sursa(job #2082856)

Utilizator ScarymovieMocanu Alexandru Scarymovie Data 6 decembrie 2017 20:54:26
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
vector<int> h;
void MaxHeapify(int nod,int n)
{
    if(2*nod>n) return;
    if(2*nod==n)
    {
        if(h[2*nod]>h[nod]) h[2*nod]^=h[nod]^=h[2*nod]^=h[nod];
        return;
    }
    if(h[2*nod]<h[nod] && h[nod]>h[2*nod+1]) return;
    if(h[2*nod]>h[nod] && h[2*nod]>h[2*nod+1])
    {
        h[2*nod]^=h[nod]^=h[2*nod]^=h[nod];
        MaxHeapify(2*nod,n);
        return;
    }
    h[2*nod+1]^=h[nod]^=h[2*nod+1]^=h[nod];
    MaxHeapify(2*nod+1,n);
    return;
}
int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    int n,i;
    f>>n;
    h.resize(n+1);
    for(int i=1; i<=n; ++i) f>>h[i];
    for(int i=n/2; i>=1; --i)
        MaxHeapify(i,n);
    for(int i=n; i>=2; --i)
    {
        h[i]^=h[1]^=h[i]^=h[1];
        MaxHeapify(1,i-1);
    }
    for(i=1; i<=n; ++i) g<<h[i]<<' ';
    return 0;
}