Cod sursa(job #1321375)

Utilizator VladutZ94FMI Chichirau Vlad Vasile VladutZ94 Data 19 ianuarie 2015 02:12:31
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>

using namespace std;
int arr[500001],n;

void MAX_HEAPIFY(int *a, int i, int n)
{
    int j, temp;
    temp=a[i];
    j=2*i;
    while(j<=n)
    {
        if(j<n && a[j+1]>a[j])
            j++;
        if (temp>a[j])
            break;
        else
            if (temp<=a[j])
            {
                a[j/2]=a[j];
                j=2*j;
            }
    }
    a[j/2]=temp;
    return;
}

void HeapSort(int *a, int n)
{
    int i,temp;
    for (i= n;i>=2;i--)
    {
        temp=a[i];
        a[i]=a[1];
        a[1]=temp;
        MAX_HEAPIFY(a, 1, i-1);
    }
}
void BUILD_MAXHEAP(int *a, int n)
{
    int i;
    for(i=n/2;i>=1;i--)
    {
        MAX_HEAPIFY(a, i, n);
    }
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&arr[i]);
    BUILD_MAXHEAP(arr,n);
    HeapSort(arr,n);
    for(int i=1;i<=n;i++)
        printf("%d ",arr[i]);
    return 0;
}