Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Algoritmos de Ordenação - Parte 1

Algoritmos de Ordenação - Parte 1

Algoritmos de Ordenação - Parte 1
Bogo sort, Bubble sort, insertion sort, selection sort.

Avatar for Jhonathan P. Banczek

Jhonathan P. Banczek

September 17, 2019
Tweet

More Decks by Jhonathan P. Banczek

Other Decks in Education

Transcript

  1. Problema Dado um vetor desordenado V =[5,1,2,4,3] precisamos achar um

    algoritmo que nos retorne o vetor V de maneira ordenada: [1,2,3,4,5] nesse caso na ordem crescente.
  2. Soluções uma solução absurda, porém, interessante: Algoritmo: bogo Sort ou

    Estou Com Sorte. - baseado na reordenação aleatória dos elementos
  3. O algoritmo termina pelo teorema do macaco infinito: - existe

    alguma probabilidade de que aconteça a permutação correta, dado que em um infinito número de tentativas fatalmente a encontrará. - a complexidade esperada é O (n * n !)
  4. Bubble Sort A ideia é percorrer o vetor comparando os

    elementos adjacentes e fazer a troca das posições caso não esteja na ordem correta. (a ordem pode ser maior ou menor)
  5. Bubble Sort: algoritmo (em Python) def bubble_sort(vetor): for i in

    vetor: indice = 0 while indice < len(vetor)-1: if vetor[indice] > vetor[indice + 1]: # swap / troca aux = vetor[indice] vetor[indice] = vetor[indice + 1] vetor[indice + 1] = aux indice += 1 return vetor
  6. Bubble Sort: exemplo 4, 3, 2, 1 => 4 >

    3? troca 3, 4, 2, 1 => 4 > 2? troca 3, 2, 4, 1 => 4 > 1? troca 3, 2, 1, 4 => 3 > 2? troca 2, 3, 1, 4 => 3 > 1? troca 2, 1, 3, 4 => 3 > 4? não 2, 1, 3, 4 => 2 > 1? troca 1, 2, 3, 4 => 2 > 3? não 1, 2, 3, 4 => 3 > 4? não
  7. Bubble Sort: modificação Podemos melhor um pouco o algoritmo usando

    uma variável para verificar se não existe mais troca e interromper o loop:
  8. Bubble Sort: modificação def bubble_sort(vetor): trocado = True while trocado:

    trocado = False indice = 0 while indice < len(vetor)-1: if vetor[indice] > vetor[indice + 1]: # swap / troca aux = vetor[indice] vetor[indice] = vetor[indice + 1] vetor[indice + 1] = aux trocado = True indice += 1 return vetor
  9. Insertion Sort Semelhante a um jogador ordenando as cartas de

    um baralho na mão. Percorra as posições do vetor, começando com o índice 1 (um). Cada nova posição é como a nova carta que você recebeu, e você precisa inseri-la no lugar correto no sub-vetor ordenado à esquerda daquela posição.
  10. Insertion Sort: algoritmo (em Python) def insertion_sort(vetor): indice = 1

    while indice < len(vetor): chave = vetor[indice] k = indice while k > 0 and chave < vetor[k - 1]: vetor[k] = vetor[k - 1] k -= 1 vetor[k] = chave indice += 1 return vetor
  11. Insertion Sort: exemplo 4, 3, 2, 1 4, 3, 2,

    1 4, 3, 2, 1 => 3, 4, 2, 1 3, 4, 2, 1 3, 4, 2, 1 => 2, 3, 4, 1 2, 3, 4, 1 2, 3, 4, 1 2, 3, 4, 1 => 1, 2, 3, 4
  12. Selection Sort Algoritmo baseado em se passar sempre o menor

    valor do vetor para a primeira posição, depois o de segundo menor valor para a segunda posição, e assim é feito sucessivamente com o n-1 elementos restantes, até os últimos dois elementos.
  13. Selection Sort: algoritmo (em Python) def selection_sort(vetor): indice = 0

    while indice < len(vetor): menor = indice j = indice + 1 while j < len(vetor): if vetor[j] < vetor[menor]: menor = j j += 1 aux = vetor[indice] vetor[indice] = vetor[menor] vetor[menor] = aux indice += 1 return vetor
  14. Selection Sort: exemplo 4, 3, 2, 1 4, 3, 2,

    1 => achou menor - troca 1, 3, 2, 4 1, 3, 2, 4 => achou menor - troca 1, 2, 3, 4 => nenhum menor
  15. Exercício de fixação 1) Utilizando os algoritmos anteriores: bubble, insert

    e selection sort, efetue o teste de mesa para a seguinte entrada: vetor = [7,1,3,4,3,5]