Cod sursa(job #921814)

Utilizator PopdanDanielPopdan Daniel PopdanDaniel Data 21 martie 2013 15:36:03
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
// Heap_Bottom_Up.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#define NMAX 50000
// Heap_Top_Down.cpp : Defines the entry point for the console application.
//
int A[NMAX], H[NMAX], m,n;
int ind_min(int a, int b, int c)
{
    int min;
    if(b<=m)
    {
        if(H[a]<H[b])
            min=a;
        else
            min=b;
        if(c<=m)
        {
            if(min>H[c])
                min=c;
        }
        return min;
    }
    else
        return a;
}
int st(int i)
{
    return 2*i;
}
int dr(int i)
{
    return 2*i +1;
}
void RecHeap(int i)
{
    int ind,var;
    ind = ind_min(i,st(i), dr(i));
    if(ind !=i)
    {
        var=H[i];
        H[i]=H[ind];
        H[ind]=var;
        RecHeap(ind);
    }
}
void H_Init()
{
    n=0;
}

int p(int i)
{
    return i/2;
}
void H_Push(int key)
{
    int i,var;
    n++;
    H[n]=key;

    i=n;

 

    while((i>1) &&(H[p(i)]> H[i]))
    {
        var = H[p(i)];
        H[p(i)]= H[i];
        H[i] = var;
        i=p(i);
       
    }
}
int H_Pop()
{
	int minim;
	minim =H[1];
	n--;
	H[1]=H[n];
	RecHeap(1);
	
	return minim;
}
int main()
{
    freopen("heap.in", "r", stdin);
	freopen("heap.out" , "w", stdout);
	scanf("%d", &m);
	int i;
	for(i=1; i<=m;i++)
		scanf("%d", &A[i]);
   H_Init();
   for(i=1;i<=m;i++)
	   H_Push(A[i]);
   while(n!=0)
   {
   int k = H_Pop();
   printf("%d ",k);
   }
   return 0;
}