01 - Primeiros Algoritmos (simples) de ordenação
Nessa primeira atividade vamos entender um algoritmo simulando seu funcionamento.
Bubble Sort
BUBBLE_SORT(A)
N ← TAMANHO(A)
FEZ_TROCA ← VERDADEIRO
ENQUANTO FEZ_TROCA FAÇA
FEZ_TROCA ← FALSO
PARA CADA I ← 0 ATÉ N-1 FAÇA
SE A[I] > A[I+1] ENTÃO
TROQUE OS VALORES DE A[I] E A[I+1]
FEZ_TROCA ← VERDADEIRO
FIM
FIM
FIM
Vamos primeiro começar simulando a primeira passagem no loop ENQUANTO
.
Exercício 1
Resposta
Ao fim você deve A = [ 3, 2, 4, 5, 8, 12, 77 ]
Exercício 2
Resposta
Ao fim você deve A = [ 7, 6, 5, 4, 3, 2, 1, 8 ]
Exercício 3
Resposta
Ao fim você deve A = [ 10, 20, 30, 40, 50, 60, 70, 80 ]
Agora vamos ver o algoritmo funcionando por inteiro.
Exercício 4
Resposta
A = [ 3, 2, 4, 5, 8, 12, 77 ]
A = [ 2, 3, 4, 5, 8, 12, 77 ]
A = [ 2, 3, 4, 5, 8, 12, 77 ]
É necessária uma última passagem que checa se é possível trocar algum elemento. Por isso a última linha está duplicada.
Exercício 5
Resposta
A = [ 7, 6, 5, 4, 3, 2, 1, 8 ]
A = [ 6, 5, 4, 3, 2, 1, 7, 8 ]
A = [ 5, 4, 3, 2, 1, 6, 7, 8 ]
A = [ 4, 3, 2, 1, 5, 6, 7, 8 ]
A = [ 3, 2, 1, 4, 5, 6, 7, 8 ]
A = [ 2, 1, 3, 4, 5, 6, 7, 8 ]
A = [ 1, 2, 3, 4, 5, 6, 7, 8 ]
A = [ 1, 2, 3, 4, 5, 6, 7, 8 ]
É necessária uma última passagem que checa se é possível trocar algum elemento. Por isso a última linha está duplicada.
Exercício 6
Resposta
A = [ 10, 20, 30, 40, 50, 60, 70, 80 ]
Só roda uma vez, dado que já está ordenado.
Agora que simulamos uma vez, podemos ver um vídeo desse algoritmo funcionando para o array [ 3 0 1 8 7 2 5 4 6 9 ]
Exercício 7
Resposta
Discutido em sala. Use a opção "Editar" para modificar suas anotações após a discussão.
Selection Sort
Vamos agora desenvolver um algoritmo a partir de uma ideia de alto nível:
- Comece encontrando o menor elemento do array. Troque ele de posição com o elemento na posição
0
. - Faça o mesmo para a posição
1
, mas procurando o mínimo agora a partir do elemento1
. Troque esse elemento com o da posição1
- Repita isso para todas as posições do array, sempre tomando cuidado para pegar o mínimo da porção à direita da posição atual.
Vamos agora simular essa ideia para entendê-la melhor.
Exercício 8
Resposta
A lista abaixo está ordenada pelo índice do elemento analisado
- O menor elemento de A é 2, então fazemos a troca entre o índice
0
e o índice3
.A = [2, 5, 4, 3]
- O menor elemento de A (a partir do índice 1) é 3. É feita troca entre os índices
1
e3
.A = [2, 3, 4, 5]
- O menor elemento de A (a partir do índice 2) é 4. É feita troca entre os índices
2
e2
.A = [2, 3, 4, 5]
Quando chegamos no índice 3
a porção restante de A
só tem um elemento, então terminamos aqui.
Exercício 9
Resposta
A lista abaixo está ordenada pelo índice do elemento analisado
- O menor elemento de A é 5, então fazemos a troca entre o índice
0
e o índice0
.A = [5, 6, 8, 11]
- O menor elemento de A (a partir do índice 1) é 6. É feita troca entre os índices
1
e1
.A = [5, 6, 8, 11]
- O menor elemento de A (a partir do índice 2) é 8. É feita troca entre os índices
2
e2
.A = [5, 6, 8, 11]
Quando chegamos no índice 3
a porção restante de A
só tem um elemento, então terminamos aqui.
Exercício 10
Resposta
A lista abaixo está ordenada pelo índice do elemento analisado
- O menor elemento de A (a partir do índice 0) é -1. É feita troca entre os índices
0
e4
.A = [-1, 7, 12, 0, 3, 4, 8]
- O menor elemento de A (a partir do índice 1) é 0. É feita troca entre os índices
1
e3
.A = [-1, 0, 12, 7, 3, 4, 8]
- O menor elemento de A (a partir do índice 2) é 3. É feita troca entre os índices
2
e4
.A = [-1, 0, 3, 7, 12, 4, 8]
- O menor elemento de A (a partir do índice 3) é 4. É feita troca entre os índices
3
e5
.A = [-1, 0, 3, 4, 12, 7, 8]
- O menor elemento de A (a partir do índice 4) é 7. É feita troca entre os índices
4
e5
.A = [-1, 0, 3, 4, 7, 12, 8]
- O menor elemento de A (a partir do índice 5) é 8. É feita troca entre os índices
5
e6
.A = [-1, 0, 3, 4, 7, 8, 12]
Quando chegamos no índice 6
a porção restante de A
só tem um elemento, então terminamos aqui.
Novamente, veja um vídeo da simulação para o array [ 3 0 1 8 7 2 5 4 9 6 ]
Agora que já simulamos o algoritmo algumas vezes, vamos escrever o pseudo código dele.
Exercício 11
Resposta
Discutido em sala. Use a opção "Editar" para modificar suas anotações após a discussão.
Considerações sobre eficiência
Os algoritmos acima são bem diferentes entre si.
Exercício 12
Resposta
Discutido em sala. Use a opção "Editar" para modificar suas anotações após a discussão.
Exercício 13
Resposta
Discutido em sala. Use a opção "Editar" para modificar suas anotações após a discussão.
Exercício 14
Resposta
Discutir no atendimento esse aqui ;)