Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Algoritmos de ordenação
Nayara Gatto Pracucho Vinícius Bertaco Neves
2
Bubble Sort A ideia é percorrer o vetor diversas vezes, fazendo “flutuar” para o topo o menor elemento da sequência. Se o vetor for considerado do tipo coluna, os elementos podem ser comparados com bolhas em um tanque de água, com densidades proporcionais ao valor das respectivas chaves.
3
Bubble Sort ... para i 2 até i N, com passo i i+1 para j N até j i, com passo j j-1 se ( a [ j - 1 ] > a [ j ] ) x a [ j – 1 ] a [ j – 1 ] a [ j ] a [ j ] x fim se fim para
4
Bubble Sort N = N = N = 8 a a a 1 45 56 12 43 95 19 8 67 1 45 56 12 43 95 19 8 67 1 45 56 12 43 95 8 19 67 i 2 i 2 i 2 3 3 3 4 4 4 5 5 5 6 j - 1 j - 1 6 6 j - 1 7 7 j 7 j 8 j 8 8
5
Bubble Sort N = N = N = 8 a a a 1 45 56 12 43 95 8 19 67 1 45 56 12 43 8 95 19 67 1 45 56 12 43 8 95 19 67 i 2 i 2 i 2 3 3 3 4 4 4 j - 1 5 j - 1 5 j - 1 5 j 6 j 6 j 6 7 7 7 8 8 8
6
Bubble Sort N = N = N = 8 a a a 1 45 56 12 8 43 95 19 67 1 45 56 12 8 43 95 19 67 1 45 56 8 12 43 95 19 67 i 2 i 2 i 2 3 3 j - 1 3 j - 1 4 j - 1 4 j 4 j 5 j 5 5 6 6 6 7 7 7 8 8 8
7
Bubble Sort N = N = N = 8 a a a 1 45 56 8 12 43 95 19 67 1 45 8 56 12 43 95 19 67 1 45 8 56 12 43 95 19 67 j - 1 i 2 j - 1 i 2 j - 1 i 2 j 3 j 3 3 j 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8
8
Término da primeira passagem (i = 2)
Bubble Sort N = N = N = 8 a a a 1 8 45 56 12 43 95 19 67 j - 1 8 45 56 12 43 95 19 67 1 8 45 56 12 43 95 19 67 1 i 2 j i 2 2 3 3 i 3 4 4 4 5 5 5 6 6 6 j - 1 7 7 7 8 j 8 8 Término da primeira passagem (i = 2)
9
Bubble Sort N = N = N = 8 a a a 1 8 45 56 12 43 95 19 67 1 8 45 56 12 43 19 95 67 1 8 45 56 12 43 19 95 67 2 2 2 i 3 i 3 i 3 4 4 4 5 5 5 j - 1 6 j - 1 j - 1 j 6 6 7 j j 7 7 8 8 8
10
Bubble Sort N = N = N = 8 a a a 1 8 45 56 12 19 43 95 67 1 8 45 56 12 19 43 95 67 1 8 45 56 12 19 43 95 67 2 2 2 i 3 i 3 i 3 j - 1 4 4 j - 1 4 j 5 j - 1 5 j 5 6 j 6 6 7 7 7 8 8 8
11
Bubble Sort N = N = N = 8 a a a 1 8 45 12 56 19 43 95 67 1 8 45 12 56 19 43 95 67 1 8 12 45 56 19 43 95 67 2 2 j - 1 2 j - 1 i 3 j - 1 i 3 j i 3 j 4 j 4 4 5 5 5 6 6 6 7 7 7 8 8 8
12
Término da segunda passagem (i = 3)
Bubble Sort N = N = N = 8 a a a 1 8 12 45 56 19 43 95 67 8 12 45 56 19 43 95 67 1 8 12 45 56 19 43 67 95 1 2 2 2 i 3 3 3 4 i 4 i 4 5 5 5 6 6 6 7 j - 1 7 j - 1 7 8 8 8 j j Término da segunda passagem (i = 3)
13
Bubble Sort N = N = N = 8 a a a 1 8 12 45 56 19 43 67 95 8 12 45 56 19 43 67 95 1 8 12 45 56 19 43 67 95 1 2 2 2 3 3 3 i 4 i 4 i 4 j - 1 5 5 j - 1 5 j 6 j - 1 j 6 6 7 j 7 7 8 8 8
14
Bubble Sort N = N = N = 8 a a a 1 8 12 45 19 56 43 67 95 8 12 19 45 56 43 67 95 1 8 12 45 19 56 43 67 95 1 2 2 2 3 3 j - 1 3 j - 1 i 4 j - 1 i 4 j i 4 j 5 j 5 5 6 6 6 7 7 7 8 8 8
15
Término da passagem (i = 4)
Bubble Sort N = N = N = 8 a a a 1 8 12 19 45 56 43 67 95 8 12 45 19 56 43 67 95 1 8 12 19 45 56 43 67 95 1 2 2 2 3 3 3 i 4 4 4 5 i 5 i 5 6 6 6 j - 1 7 j - 1 7 j 7 8 8 8 j Término da passagem (i = 4)
16
Bubble Sort N = N = N = 8 a a a 1 8 12 19 45 56 43 67 95 8 12 19 45 43 56 67 95 1 8 12 19 45 43 56 67 95 1 2 2 2 3 3 3 4 4 4 j - 1 i 5 j - 1 i 5 j - 1 i 5 j 6 j 6 j 6 7 7 7 8 8 8
17
Término da passagem (i = 5)
Bubble Sort N = N = N = 8 a a a 1 8 12 19 43 45 56 67 95 8 12 19 43 45 56 67 95 1 8 12 19 43 45 56 67 95 1 2 2 2 3 3 3 4 j - 1 4 4 i 5 j i 5 5 6 i 6 6 7 7 j - 1 7 8 8 j 8 Término da passagem (i = 5)
18
Término da passagem (i = 6)
Bubble Sort N = N = N = 8 a a a 1 8 12 19 43 45 56 67 95 1 8 12 19 43 45 56 67 95 1 8 12 19 43 45 56 67 95 2 2 2 3 3 3 4 4 4 5 5 j - 1 5 i 6 j - 1 i j i 6 6 7 j 7 7 8 8 8 Término da passagem (i = 6)
19
Término da passagem (i = 7)
Bubble Sort N = N = N = 8 a a a 1 8 12 19 43 45 56 67 95 1 8 12 19 43 45 56 67 95 1 8 12 19 43 45 56 67 95 2 2 2 3 3 3 4 4 4 5 5 5 6 j - 1 6 6 i 7 j - 1 i j i 7 7 8 j 8 8 Término da passagem (i = 7)
20
Término da passagem (i = 8)
Bubble Sort N = N = 8 a a 1 8 12 19 43 45 56 67 95 1 8 12 19 43 45 56 67 95 2 2 3 3 4 4 5 5 6 6 7 j - 1 7 8 j i i 8 Término da passagem (i = 8)
21
O(N²) Bubble Sort Complexidade:
No melhor caso, o algoritmo executa n operações relevantes. No pior caso, são feitas n² operações. Portanto, a complexidade desse algoritmo é de Ordem quadrática. O(N²)
22
Bubble Sort Conclusão:
O Bubble Sort é um método de simples implementação, porém a sua eficiência é menor entre os métodos de ordenação interna. Vantagens Desvantagem - Fácil implementação - Complexidade quadrática - Algoritmo estável
23
Quicksort História: Método de ordenação muito rápido e eficiente, inventado por C.A.R. Hoare em 1960 Criou o Quicksort ao tentar traduzir um dicionário de inglês para russo, ordenando as palavras. Tendo como objetivo reduzir o problema original em subproblemas que possam ser resolvidos mais fácil e rapidamente.
24
Quicksort Qual a ideia básica do Quicksort?
A ideia básica é dividir o problema de ordenar um conjunto com n itens em dois subproblemas menores (estratégia de divisão e conquista). Os problemas menores são ordenados independentes. Utiliza um elemento arbitrário chamado pivô. Geralmente é o elemento do meio O pivô pode influenciar no desempenho
25
Quicksort Funcionamento detalhado: Algoritmo de Partição
O vetor v é rearranjado por meio da escolha arbitrária de um pivô p O vetor v é particionado em dois: Restarão dois ‘sub-vetores’ para serem ordenados. Espera-se que o ‘sub-vetor’ esquerdo contenha elementos menores que o pivô e o ‘sub-vetor’ direito, elementos maiores. O vetor é então percorrido em ambos os sentidos, e quando a condição não é satisfeita, os elementos são trocados. Termina cada ‘etapa’ quando ponteiros se cruzam, continua recursivamente.
26
Quicksort
27
Quicksort
28
Quicksort
29
Quicksort Complexidade: Pior caso
Acontece quando o pivô é sempre o maior ou menor elemento (partições de tamanho desequilibrado) = O(n²) espaço/memória necessário no pior caso é linear Melhor caso Acontece quando as partições têm sempre o mesmo tamanho (partições balanceadas). Pivô representa elemento mediano do conjunto. C(n) = n(logn) = O (n logn) Caso médio C(n) ~ 1,39 n logn = O (n logn)
30
Quicksort Análise: Vantagens: Algoritmo Instável Desvantagem:
Melhor opção para ordenar vetores grandes. Muito rápido devido ao laço interno ser simples. Algoritmo Instável Processo de partição não é estável Qualquer chave pode ser movida para trás de várias outras chaves iguais a si (que ainda não foram examinadas) Não é conhecida nenhuma forma simples de implementar uma versão estável. Não se deve chamar recursivamente se o vetor tiver tamanho 1 Desvantagem: Pior caso (n²)
31
Quicksort Otimizações: Outras abordagens Pivô baseado em uma Mediana
Aumentar o número de elementos considerados na mediana. Implementação não recursiva Pilha auxiliar, que pode ter tamanho N. Ordenar a partição menor primeiro. Algoritmo genérico incluído na biblioteca padrão Stdlib.h “ void qsort (void *v, int n, int tam, int (*cmp)(const void*, const void*)); ” Muito rápido devido ao laço interno ser simples.
32
Biblioteca http://dcm.ffclrp.usp.br/~augusto/icii/
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.