Cod sursa(job #2062675)

Utilizator grecubogdanGrecu Bogdan grecubogdan Data 10 noiembrie 2017 18:14:44
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream g("algsort.out");
int n, heap[500001];
void urcare(int heap[500001], int p)
{
    while(p>=2 && heap[p/2]<heap[p])
    {
        int aux=heap[p/2];
        heap[p/2]=heap[p];
        heap[p]=aux;
        p=p/2;
    }
}
void coborare( int heap[500001],int n , int p)
{
    while(2*p<=n)
    {
        int r=2*p;
        if(r+1<=n && heap[r+1]>heap[r])
        {
            r=r+1;
        }
        if(heap[p]<heap[r])
        {
            int aux=heap[p];
            heap[p]=heap[r];
            heap[r]=aux;
            p=r;
        }
        else
        {
            break;
        }
    }
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>heap[i];
        urcare(heap ,i);
    }
    for(int i=n;i>=2;i--)
    {
        int aux=heap[1];
        heap[1]=heap[i];
        heap[i]=aux;
        coborare( heap , i-1, 1);
    }
    for(int i=1;i<=n;i++)
    {
        g<<heap<<" ";
    }
    return 0;
}