#!/usr/bin/python# -*- coding: utf-8 -*-#define max 10#Heap é uma lista linear composta por elementos com chave de Si,....,Sn#e devem obedecer a propriedade Si <= S[i/2] (S piso de i/2) para 1 < i <= nlivros = [11,90,123,321,22,34,54]livros.append(10)print "\nVetor desordenado: \n"print livrostam = len(livros)def subirHeap(lista,pos): j=pos/2 if j>=0: if lista[pos]>lista[j]: aux = lista[pos] lista[pos] = lista[j] lista[j] = aux subirHeap(lista,j)def descerHeap(lista,pos,n): j=2*pos if j<=n: if j<n: lista[j+1] > lista[j] j = j+1 if lista[pos] < lista[j]: aux = lista[pos] lista[pos] = lista[j] lista[j] = aux descerHeap(lista,j,n)def inserirHeap(lista,n): global tam if (tam+1)<max: i = int(raw_input("Insira um valor: ")) livros.append(i) tam=tam+1 subirHeap(livros,n+1)def removerHeap(lista,n): global tam if tam > 0: lista[0] = lista[n-1] lista.pop(n-1) tam = tam-1 else: print "Lista de prioridades vazia"def construirHeap(lista,n): #O(n log n) for i in range(2,n): subirHeap(lista,i)def alterarHeap(lista,n): if n+1 != 0: novo = int(raw_input("Entre com o novo valor do primeiro elemento: ")) lista[0] = novo descerHeap(lista,0,n)def construirHeapEficiente(lista,n): for i in range(n/2,-1,-1): descerHeap(lista,i,n)#subirHeap(livros,2)#descerHeap(livros,0,tam-1)#print livros#inserirHeap(livros,tam-1) #insere um elemento no heap#print livros#removerHeap(livros,tam) #remove primeiro elemento#print livros#print tam#construirHeap(livros,tam-1)construirHeapEficiente(livros,tam-1)print "\nLista de prioridades: \n"print livros#alterarHeap(livros,tam-1) #alterando o primeiro elemento#print livros