Você está na página 1de 8

Exercícios Pesquisa e Ordenação

Apenas teoria, sem uso de programação.

1) Considere um vetor ‘vInt’ com capacidade para 10 elementos

a) Preencha manualmente o vetor com os números de 0 a 9 tomados


aleatoriamente e sem repetição;

Resposta: vInt = {5, 9, 7, 6, 2, 1, 3, 4, 0, 8}

b) Descreva os passos do algoritmo de pesquisa sequencial, necessários para


encontrar a posição do número ‘7’;

Passo 1: Começando indexado em 0 (int i = 0), o algoritmo sequencial


começaria a busca. Uma comparação é feita entre o valor presente no
índice 0 e o valor 7. Como não é, a busca continua.

Passo 2: o índice é incrementado em 1 (i++). Agora, estando no indice 1,


uma nova comparação é feita. Como não foi encontrado o 7, a busca
prossegue.

Passo 3: O passo 2 é repetido até o algoritmo encontrar o número 7 (ou


chegar no final do vetor), assim sendo, até o indice ser 2, isto é vInt[2];

c) Descreva o que acontece quando usamos o algoritmo de busca sequencial


para pesquisar pelo valor ‘11’;

Resposta: Começando indexado em 0 (int i = 0), o algoritmo sequencial


começaria a busca. Uma comparação é feita entre o valor presente no
indice 0 e o valor 11. Como não é, a busca continua.

No próximo passo, o indice é incrementado em 1 (i++). Agora,


estando no indice 1, uma nova comparação é feita. Como não foi
encontrado o 11, a busca prossegue. Esse passo é repetido até o algoritmo
encontrar o número até o algoritmo encontrar o número 11 (ou chegar no
final do vetor). O algoritmo seguirá incrementando o indice e não encontrará
o número 11, retornando uma negativa (false).

d) Realize a ordenação do vetor através do algoritmo InsertionSort, mostre o


passo a passo;

vInt = {5, 9, 7, 6, 2, 1, 3, 4, 0, 8}

Passo 1: Neste passo, o InsertionSort verifica a primeira posição do vetor (i =


0) e o considera inserido de forma ordenada;

Passo 2: Verifica-se o próximo índice do vetor, contendo o número 9, e tenta-


se inserir ordenadamente no trecho já ordenado do vetor. Nesse caso, nada se
sucederá, dado que, 5 e 9 já estão sequenciais.

Passo 3: Seguindo para o próximo índice (i = 2), temos o número 7. O


algoritmo tenta inserir esse número no trecho já ordenado (5, 9). Nota-se que
ficará entre 5 e 9. Sendo assim, o 9 será deslocado uma posição à direita e o 7
será inserido na segunda posição (i = 1).

Passo 4: : No próximo índice (i = 3), temos o número 6. O algoritmo tenta


inserir esse número no trecho já ordenado (5, 7, 9). Nota-se que ficará entre 5
e 7. Sendo assim, os número 7 e 9 serão deslocados uma posição à direita e o
6 será inserido na segunda posição (i = 1).

Passo 5: No próximo índice (i = 4), temos o número 2. O algoritmo tenta inserir


esse número no trecho já ordenado (5, 6, 7, 9). Nota-se que ficará antes do
número 5. Sendo assim, os números 5, 6, 7 e 9 serão deslocados uma posição
à direita e o 2 será inserido na primeira posição (i = 0).
Passo 6: No próximo índice (i = 5), temos o número 1. O algoritmo tenta inserir
esse número no trecho já ordenado (2, 5, 6, 7, 9). Nota-se que ficará antes do
número 2. Sendo assim, os números 2, 5, 6, 7 e 9 serão deslocados uma
posição à direita e o 1 será inserido na primeira posição (i = 0).

Passo 7: No próximo índice (i = 6), temos o número 3. O algoritmo tenta inserir


esse número no trecho já ordenado (1, 2, 5, 6, 7, 9). Nota-se que ficará entre
os números 2 e 5. Sendo assim, os números 5, 6, 7 e 9 serão deslocados uma
posição à direita e o 3 será inserido na terceira posição (i = 2).

Passo 8: No próximo índice (i = 7), temos o número 4. O algoritmo tenta inserir


esse número no trecho já ordenado (1, 2, 3, 5, 6, 7, 9). Nota-se que ficará entre
os números 3 e 5. Sendo assim, os números 5, 6, 7 e 9 serão deslocados uma
posição à direita e o 4 será inserido na quarta posição (i = 3).

Passo 9: No próximo índice (i = 8), temos o número 0. O algoritmo tenta inserir


esse número no trecho já ordenado (1, 2, 3, 4, 5, 6, 7, 9). Nota-se que ficará
antes do número 1. Sendo assim, os números 1, 2, 3, 4, 5, 6, 7 e 9 serão
deslocados uma posição à direita e o 0 será inserido na primeira posição (i =
0).

Passo 10: No próximo índice (i = 9), temos o número 8. O algoritmo tenta


inserir esse número no trecho já ordenado (0, 1, 2, 3, 4, 5, 6, 7, 9). Nota-se que
ficará entre os números 7 e 9. Sendo assim, o número 9 será deslocado uma
posição à direita e o 8 será inserido na oitava posição (i = 7).

Passo 11: O algoritmo retorna o vetor ordenado.

e) Realize a ordenação do vetor através do algoritmo quickSort, mostre o


passo a passo;

vInt = {5, 9, 7, 6, 2, 1, 3, 4, 0, 8}

Passo 1: Nesse passo, vamos começar a etapa de divisão. Para tanto,


vamos escolher o primeiro elemento do vetor como pivô (elemento 5, índice 0).
Passo 2: No passo seguinte, coloca-se um ponteiro no último elemento do
vetor: elemento 8, índice 8.

Passo 3: O algoritmo vai verificar, elemento a elemento, quem é menor que


5, deslocando o para a esquerda e quem é maior que 5, deslocando para a direita.
5 é maior que 8? Não! Então 8 mantém sua posição.

Passo 4: O ponteiro é deslocado para a esquerda, para o número 0. 5 é


maior que 0? Sim! Então, esses 2 elementos “trocam de lugar”, resultando em vInt
= {0, 9, 7, 6, 2, 1, 3, 4, 5, 8}.

Passo 5: O ponteiro assume a posição seguinte ao 0, no caso, a posição do


número 9. Como o 5 está à direita de 9, a pergunta muda. 5 é menor que 9? Sim!
Então vão trocar de lugar vInt = {0, 5, 7, 6, 2, 1, 3, 4, 9, 8}.

Passo 6: O ponteiro assume a posição anterior ao 9, no caso, a posição do


número 4. 5 é maior que 4? Sim! Então vão trocar de lugar vInt = {0, 4, 7, 6, 2, 1,
3, 5, 9, 8}.

Passo 7: O ponteiro assume a posição sucessor ao 4, no caso, a posição


do número 7. 5 é menor que 7? Sim! Então vão trocar de lugar vInt = {0, 4, 5, 6, 2,
1, 3, 7, 9, 8}.

Passo 8: O ponteiro assume a posição anterior ao 7, no caso, a posição do


número 3. 5 é maior que 3? Sim! Então vão trocar de lugar vInt = {0, 4, 3, 6, 2, 1,
5, 7, 9, 8}.

Passo 9: O ponteiro assume a posição sucessor ao 3, no caso, a posição


do número 6. 5 é menor que 6? Sim! Então vão trocar de lugar vInt = {0, 4, 3, 5, 2,
1, 6, 7, 9, 8}.

Passo 10: O ponteiro assume a posição anterior ao 6, no caso, a posição


do número 1. 5 é maior que 1? Sim! Então vão trocar de lugar vInt = {0, 4, 3, 1, 2,
5, 6, 7, 9, 8}.
Passo 9: O ponteiro assume a posição sucessor ao 1, no caso, a posição
do número 2. 5 é menor que 2? Não! Então mantém-se as posições vInt = {0, 4, 3,
1, 2, 5, 6, 7, 9, 8}. Essa é a ordenação final para o pivô 5, ele está ordenado.

Passo 10: Divide-se o vetor em 2 grupos: Menores que 5 e maiores que 5.


vMenores = {0, 4, 3, 1, 2}. vMaiores = {6, 7, 9, 8}.

Passo 11: Para cada um dos vetores, repete-se os passos de 1 a 10, até
que estejam ordenados, uma recursão! Divisão e conquista. vMenores ficará com
0 como pivô e terá ordenação final: {0, 4, 3, 1, 2}, ou seja, 0 já está ordenado. Na
interação seguinte, será efetuado a ordenação para vMaioresQue0 = {4,3,1,2}.
Sendo 4 o pivô, na interação final, teremos: {2,3,1,4}.

Passo n: O algoritmo finaliza após o último passo da recursão e o vetor


estar ordenado vInt = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.

f) Usando o vetor ordenado no item e), descreva os passos do algoritmo de


pesquisa sequencial ordenada, necessários para encontrar a posição do
número ‘7’, compare com o item a);

Passo 1: Começando indexado em 0 (int i = 0), o algoritmo sequencial


começaria a busca. Uma comparação é feita entre o valor presente no
índice 0 e o valor 7. Como não é, a busca continua.

Passo 2: o índice é incrementado em 1 (i++). Agora, estando no índice 1,


uma nova comparação é feita. Como não foi encontrado o 7, a busca
prossegue.

Passo 3: O passo 2 é repetido até o algoritmo encontrar o número 7. Por


estar ordenado, o número de interações será igual ou menor que o número
que quer ser encontrado. Nesse caso, o número de interações é
exatamente 7.
Conclusão: Comparando com o a), verifica-se que o algoritmo ordenado
sabe o máximo de interações que será feita e, caso não encontre o
elemento na posição i = ‘valor’ -1 (7 - 1), a busca pode ser encerrada e
retornar false. Enquanto isso, a busca não ordenada sempre é encerrada
ao final do vetor ou caso encontre o elemento.

g) Usando o vetor ordenado no item e), descreva os passos do algoritmo de


pesquisa binária, necessários para encontrar a posição do número ‘7’,
compare com o item a);

Passo 1: Tome como elemento inicial, o elemento do meio da lista. Como o


tamanho do vetor é par, vamos tomar o 4 como elemento do meio da lista.

Passo 2: 7 é igual a 4? Não! Prosseguimos ao próximo passo.

Passo 3: 7 < 4? Não, isso significa que podemos descartar todos os


elementos menores ou iguais a 4 e considerar apenas x >= 4.

Passo 4: Como já vimos no passo anterior, 7 > 4. Então consideramos os


elementos à direita do ponto médio.

Passo 5: com a nova lista contendo 5, 6, 7, 8 e 9, escolho um novo ponto


médio, no caso o 7.

Passo 6: Verifica-se que é o elemento buscado e o algoritmo se encerra.

Conclusão: Nota-se que a busca sequencial não é tão eficiente, dado que
ela pode usar N iterações para encontrar o elemento do vetor. Ou seja, no pior dos
casos, ela é da ordem de N.

h) Usando o vetor ordenado no item e), descreva os passos do algoritmo de


pesquisa binária, necessários para encontrar a posição do número ‘11’,
compare com o item c);
Passo 1: Tome como elemento inicial, o elemento do meio da lista. Como o
tamanho do vetor é par, vamos tomar o 4 como elemento do meio da lista.

Passo 2: 11 é igual a 4? Não! Prosseguimos ao próximo passo.

Passo 3: 11 < 4? Não, isso significa que podemos descartar todos os


elementos menores ou iguais a 4 e considerar apenas x >= 4.

Passo 4: Como já vimos no passo anterior, 11 > 4. Então consideramos os


elementos à direita do ponto médio.

Passo 5: com a nova lista contendo 5, 6, 7, 8 e 9, escolho um novo ponto


médio, no caso o 7.

Passo 6: 11 é igual a 7? Não! Prosseguimos ao próximo passo.

Passo 7: 11 < 7? Não, isso significa que podemos descartar todos os


elementos menores ou iguais a 7 e considerar apenas x >= 7.

Passo 8: Como já vimos no passo anterior, 11 > 7. Então consideramos os


elementos à direita do ponto médio.

Passo 9: com a nova lista contendo 8 e 9, escolho um novo ponto médio.


Como é par, pegamos o 8 como elemento médio.

Passo 10: 11 é igual a 8? Não! Prosseguimos ao próximo passo.

Passo 11: 11 < 8? Não, isso significa que podemos descartar todos os
elementos menores ou iguais a 8 e considerar apenas x >= 8.

Passo 12: Como já vimos no passo anterior, 11 > 8. Então consideramos


os elementos à direita do ponto médio.

Passo 13: com a nova lista contendo apenas 9, ele será o ponto médio.

Passo 14: 11 é igual a 9? Não! O algoritmo termina retornando -1.


Conclusão: No item C o algoritmo sequencial mais interações que o
binário, dado que percorreu todo o vetor para não encontrar o elemento. Assim
sendo, verifica-se que o algoritmo binário é mais eficiente, pois considera pontos
médios e não percorre todo o vetor.

Você também pode gostar