# IAL-501 (Prof. Dr. Silvio do Lago Pereira)

from util import *

#-----------------------------------------------------------
# Exemplo 1
#-----------------------------------------------------------

def e(i): return 2*i+1

def d(i): return 2*i+2

def exiba(v,i=0,h=0):
    if i>=len(v): return
    exiba(v,d(i),h+1)
    print('%*s' % (5*h,v[i]))
    exiba(v,e(i),h+1)

#-----------------------------------------------------------
# Exemplo 2
#-----------------------------------------------------------

def desce(i,v,n):
    while 2*i+1 < n:
        j = 2*i + 1
        if j+1<n and v[j+1]>v[j]: j += 1
        if v[i] >= v[j]: break
        troca(v,i,j)
        i = j

#-----------------------------------------------------------
# Exemplo 3
#-----------------------------------------------------------

def amontoa(v):
    n = len(v)
    for i in reversed(range(0,n//2)):
        desce(i,v,n)

#-----------------------------------------------------------
# Exemplo 5
#-----------------------------------------------------------

def hsort(v):
    amontoa(v)
    n = len(v)
    for i in reversed(range(1,n)):
        troca(v,0,i)
        desce(0,v,i)
