E14.1 Critique a seguinte ideia: para transformar um vetor arbitrário em heap, basta colocá-lo em ordem decrescente.
E14.2 Suponha que v[1..m] é um heap e que os elementos do vetor são distintos dois a dois (ou seja, diferentes entre si). É claro que o maior elemento do vetor está no índice 1. Onde pode estar o segundo maior elemento? Onde pode estar o terceiro maior elemento?
E14.3 O fragmento de programa abaixo transforma um vetor arbitrário v[1..m] em heap?
for (p = 1; p <= m/2; ++p) peneira (p, m, v);
E14.4 Use o Heapsort para rearranjar o vetor 16 15 14 13 12 11 10 9 8 7 6 5 4 em ordem crescente.
E14.5 Escreva uma função ff que receba um vetor v[1..k] tal que v[1..k-1] é um heap e transforme v[1..k] em heap. Sua função deve fazer no máximo 2 log k comparações entre elementos do vetor. (Esse tipo de função é conhecido como FixUp ou Swim.)
Depois, use ff para construir uma função que transforme qualquer vetor v[1..m] em heap. Sua função deve fazer no máximo 2 m log m comparações entre elementos do vetor.