320 likes | 498 Views
Algoritmos de ordenação. Nayara Gatto Pracucho 7547722 Vinícius Bertaco Neves 7127460. Bubble S ort. A ideia é percorrer o vetor diversas vezes, fazendo “flutuar” para o topo o menor elemento da sequência.
E N D
Algoritmos de ordenação Nayara Gatto Pracucho 7547722 Vinícius Bertaco Neves 7127460
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.
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 fim para ...
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 i 2 i 2 i 2 3 3 3 4 4 4 5 5 5 j - 1 j - 1 6 6 6 j j - 1 7 j 7 7 j 8 8 8
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 i 2 i 2 i 2 3 3 3 j - 1 4 4 4 j - 1 j - 1 5 j 5 5 6 6 j j 6 7 7 7 8 8 8
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 i 2 i 2 i 2 3 j - 1 3 j - 1 3 4 4 4 j - 1 j j 5 5 j 5 6 6 6 7 7 7 8 8 8
Bubble Sort N = 8 N = 8 N = 8 a a a j - 1 1 1 1 j - 1 i 2 j i 2 i 2 j - 1 3 3 j 3 j 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8
Bubble Sort N = 8 N = 8 N = 8 a a a j - 1 1 1 1 2 i 2 i j 2 i 3 3 3 4 4 4 5 5 5 6 6 6 j - 1 7 7 7 j 8 8 8 Término da primeira passagem (i = 2)
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 2 2 i i i 3 3 3 4 4 4 j - 1 5 5 5 j - 1 j j - 1 6 6 6 j 7 j 7 7 8 8 8
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 2 2 j - 1 i i i 3 3 3 j 4 4 4 j - 1 j - 1 5 5 j 5 j 6 6 6 7 7 7 8 8 8
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 j - 1 j - 1 2 2 i j - 1 i i 3 3 3 j j 4 j 4 4 5 5 5 6 6 6 7 7 7 8 8 8
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 2 2 i 3 3 3 i 4 4 4 i 5 5 5 6 6 6 j - 1 7 j - 1 7 7 8 j j 8 8 Término da segunda passagem (i = 3)
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 2 2 3 3 3 j - 1 i 4 i 4 4 i j - 1 j 5 5 5 j j - 1 6 6 6 j 7 7 7 8 8 8
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 2 2 3 j - 1 3 j - 1 3 j - 1 i 4 i 4 4 j i j 5 5 j 5 6 6 6 7 7 7 8 8 8
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 2 2 3 3 3 4 i 4 4 i 5 5 5 i j - 1 6 6 6 j - 1 7 j 7 7 8 8 j 8 Término da passagem (i = 4)
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 2 2 3 3 3 j - 1 4 4 4 j i 5 5 i j - 1 i 5 j - 1 j j 6 6 6 7 7 7 8 8 8
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 2 2 3 3 3 4 4 j - 1 4 5 5 j i i 5 i 6 6 6 j - 1 7 7 7 8 j 8 8 Término da passagem (i = 5)
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 2 2 3 3 3 4 4 4 j - 1 5 5 5 i j i j - 1 i 6 6 6 7 j 7 7 8 8 8 Término da passagem (i = 6)
Bubble Sort N = 8 N = 8 N = 8 a a a 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 j - 1 6 6 6 j - 1 j 7 i i 7 i 7 8 j 8 8 Término da passagem (i = 7)
Bubble Sort N = 8 N = 8 a a 1 1 2 2 3 3 4 4 5 5 6 6 7 j - 1 7 i 8 j i 8 Término da passagem (i = 8)
Bubble Sort • Complexidade: • No melhor caso, o algoritmo executa n operações relevantes. • No pior caso, são feitasn² operações. • Portanto, a complexidade desse algoritmo é de Ordem quadrática. O(N²)
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.
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.
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
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.
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)
Quicksort • Análise: • Vantagens: • 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ãose deve chamar recursivamente se o vetor tiver tamanho 1 • Desvantagem: • Pior caso (n²)
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 • “ voidqsort (void *v, int n, inttam, int (*cmp)(constvoid*, constvoid*)); ” • Muito rápido devido ao laço interno ser simples.
Biblioteca • http://dcm.ffclrp.usp.br/~augusto/icii/ • http://www.cos.ufrj.br/~rfarias/cos121/aula_05.html • http://pt.wikipedia.org/wiki/Bubble_sort