Cod sursa(job #1160257)

Utilizator romykPrehari Romica romyk Data 30 martie 2014 13:31:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
using namespace std;
fstream f("algsort.in",ios::in);
fstream g("algsort.out",ios::out);
int A[500100],heap_size;
int LEFT(int i)
{
    return 2*i;
}
int RIGHT(int i)
{
    return 2*i+1;
}
void exchange(int x,int y)
{
int aux=A[x];
    A[x]=A[y];
    A[y]=aux;
}
void MAX_HEAPIFY(int i)
{
    int largest;
    int l=LEFT(i);
    int r=RIGHT(i);
    if(l<=heap_size&&A[l]>A[i])
        largest=l;
        else
            largest=i;
    if(r<=heap_size&&A[r]>A[largest])
            largest=r;
    if(largest!=i)
    {
        exchange(i,largest);
        MAX_HEAPIFY(largest);
    }
}
void BUILD_MAX_HEAP()
{
    for(int i=heap_size/2;i>=1;i--)
        MAX_HEAPIFY(i);
}
void HEAPSORT()
{
    BUILD_MAX_HEAP();
    for(int i=heap_size;i>=2;i--)
    {
        exchange(1,i);
        heap_size--;
        MAX_HEAPIFY(1);
    }
}

int main()
{
    int n;
f>>n;
heap_size=n;
for(int i=1;i<=n;i++)
    f>>A[i];
HEAPSORT();
for(int i=1;i<=n;i++)
    g<<A[i]<<" ";

    return 0;
}