Você está na página 1de 3

Estrutura de Dados II

2023/24

ED II - Lista de exercícios 2

1. Considere o conjunto v = 7, 5, 8, 2,-1, 5, 1, 23, -3, 12, 11, 89, 50 . Ordene


o vector usando o ShellSort para a seguinte lista de incrementos= {5,3,1}.
2. Quantas comparações são feitas al usar o Shellsort para o gap=7 e depois
gap=5 parao conjunto de chaves EASYQUESTION?
3. Exemplifique porque o 8, 4, 2, 1 não é um bom conjunto de valores de
incremento.
4. Dado o vector A={81,94,11,96,12,35,17,95,28,58,41,75,15}, o vector
B={35,17,11,28,12,41,75,15,96,58,81,94,95} é o resultado da ordenação
parcial do Shellsort usando gap =5? Justifique.
5. O Shellsort é uma optimização do Insertion sort. Justifique a afirmação.
6. Considere a implementação clássica do algoritmo QuickSort, dado o vector
v = <29, 16, -5, 4, 21, 40, 16, 18, 7,22, 14> e pivô = v[9]. Mostre os
elementos do vector depois de cada troca, até a execução da segunda
partição completa, assim como os valores de i e j. Considere i o índice da
esquerda e j o índice da direita.
7. Dado o conjunto A={78,49,9,-7,21,55,7,95, -2, 28}, faça a ordenação
parcial, usando Quick sort até a segunda partição. Mostre todos os passos.
8. Dado o vector V=<23, 16, 15, 24, 22, -4, 27, 38, -7, -11, 20> e pivô =
v[2] execute o algoritmo até a primeira partição. Assinale todas as trocas e
mostre o estado final de i , j e do vector, sabendo que i representa o índice
à esquerda e j o índice à direita.
9. Sabendo que um heap pode ser representado como uma árvore binária,
assumindo que a raiz está na posição de índice 0, que todo nó sem filhos é
designado de folha, indique o índice do filho da direita cujo nó está
armazenado no índice 120.

Silvia.antonio@isptec.co.ao
Estrutura de Dados II

2023/24

10. Crie um heap máximo a partir do seguinte vector V {5; 3; 17; 10; 84; 19; 6; 22;
9}
11. Dados os seguintes valores 100, 34, 23, 45, 6, 78, 27, 11, 23, 24, 97, 40
Faça um esquema que mostre a ordenação parcial crescente das chaves até
ao segundo elemento, usando o HeapSort. Mostre as diferentes árvores
sempre que houver um ajuste.
12. Diga quais dos seguintes vectores corresponde a um heap?

a. <50, 25, 30, 27, 24, 21, 28>


b. <50, 30, 25, 27, 24, 28, 21>
c. <60, 50, 9, 40, 41, 10, 8>
d. <40, 15, 18, 13, 11, 14, 16>
e. <60, 30, 80, 10, 35, 70, 40>
13. O conjunto com os valores 33; 19; 20; 15; 13; 10; 2; 13; 16; 12 é um Heap
máximo? Justifique.
14. Um determinado algoritmo de ordenação não faz comparações e funciona
da seguinte maneira: É dado como entrada, um vector A com números
positivos e sem repetições. De seguida é criado um vector B do tamanho do
maior elemento de A. Para cada elemento de A, é inserido o valor 1 em B,
no índice igual ao seu valor-1. De seguida é criado um vector C do
tamanho de A, onde são guardados de forma sequencial, os valores dos
índices de B +1, onde existe valor =1. C passa a ser o resultado ordenado.

Ex: A = 5, 3, 7, 1, 2
B = (tamanho 7)
1 1 1 1 1

0 1 2 3 4 5 6

C = (tamanho 5)
2 3 4 5 7

0 1 2 3 4

Silvia.antonio@isptec.co.ao
Estrutura de Dados II

2023/24

a. Escreva uma função para este algoritmo, usando como sugestão


a assinatura: int * countX(int *A, int N, int k), sabendo que A é o
vector, N o tamanho do vector e K o valor máximo de A.
b. Classifique o algoritmo, quanto a complexidade e indique se é ou
não um algoritmo In-Place.
15. Um determinado algoritmo de ordenação anda para a frente e para
trás nas suas comparações que até tem o nome de algoritmo
Estúpido (existe mesmo) ou Gnome sort. Ele funciona da seguinte
forma:
16. Se estiver na primeira posição do vector, anda para a frente uma
posição.
17. Compara o segundo elemento com o primeiro. Se o segundo for
menor, troca de posição com o anterior e fica na posição anterior. Se
for maior anda para a posição seguinte.
18. Repete as comparações a partir da posição onde está, até chegar ao
final do vector. Quando isso acontecer, o vector estará ordenado.
19.
a. Escreva uma função para implementar este algoritmo em
pseudocódigo ou numa linguagem em que se sinta mais
confortável. Como sugestão use a assinatura: int *
gnomeSort(int *A, int N), sabendo que A é o vector, N o
tamanho do vector. (2 V)
b. Faça a representação gráfica do algoritmo.

Silvia.antonio@isptec.co.ao

Você também pode gostar