O documento resume e compara algoritmos de ordenação como bubble sort, selection sort, quick sort, merge sort e heap sort, descrevendo suas definições, complexidades assimptóticas e demonstrações passo a passo.
6. SELECTION SORT Definição O selectionsort (ordenação por seleção) é um algoritmo de ordenação baseado em se passar sempre o menor valor do vetor para a primeira posição (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para a segunda posição, e assim é feito sucessivamente com os (n-1) elementos restantes, até os últimos dois elementos. Pior Caso: O(n2), Caso Médio O(n2) Melhor caso O(n2).
8. QUICK SORT Definição O QuickSort é um algoritmo baseado em Divisão e Conquista. Isso significa que ele divide sucessivamente um problema e partes menores . O próximo passo é solucionar recursivamente os sub-problemas, ou seja ordenar os elementos, e só então combinar as soluções menores de forma a obter a solução final. Complexidade: Pior Caso: O(n2) Caso Médio: O(nlogn) Melhor caso:O(nlogn).
10. MERGE SORT Definição Sua idéia básica é muito fácil: criar uma sequência ordenada a partir de duas outras também ordenadas. Para isso, ele divide a sequência original em pares de dados, ordena-as; depois as agrupa em sequências de quatro elementos, e assim por diante, até ter toda a sequência dividida em apenas duas partes. Os três passos úteis dos algoritmos dividir-para-conquistar, ou divide andconquer, que se aplicam ao merge sort são: Dividir: Dividir os dados em subsequências pequenas; Conquistar: Classificar as duas metades recursivamente aplicando o merge sort; Combinar: Juntar as duas metades em um único conjunto já classificado. Complexidade: Pior Caso: O(nlogn) Caso Médio: O(nlogn) Melhor caso:O(nlogn).
12. HEAP SORT Definição • HeapSorttambém é um método de seleção – ordena através de sucessivas seleções do elemento correto a ser posicionado em um segmento ordenado • O HeapSortutiliza um heap binário para manter o próximo elemento a ser selecionado – heap binário: árvore binária mantida na forma de vetor – o heapé gerado e mantido no próprio vetor a ser ordenado (no segmento não-ordenado) Complexidade: Pior Caso: O(nlogn) Caso Médio: O(nlogn) Melhor caso:O(nlogn).
13. HEAP SORT Você sabe o que um Heap? Primeiro vamos entender o que é um Heap.
14. HEAP SORT HeapBinário – Exemplo • raiz da árvore: primeira posição do vetor • filhos de um nodo na posição i: posições 2i e 2i + 1 • pai de um nodo na posição i: posição ëi / 2û
15. HEAP SORT HeapBinário Máximo • HeapBinário tal que um nodo pai tem valor maior ou igual ao valor dos nodos filhos
16. HEAP SORT Funcionamento 1. Transformação do vetor em um heap binário máximo (Construção do Heap) 2. Ordenação – a cada iteração seleciona-se o maior elemento (na raiz do heap) e o adiciona no início de um segmento ordenado – após cada seleção de elemento, o heap deve ser reorganizado para continuar sendo um heap binário máximo.
18. HEAP SORT • Método auxiliar responsável pelo ajuste de um elemento no heap – método ajustaElemento(posição, vetor.lenght) – realiza trocas no heap para posicionar corretamente um elemento • Exemplo: ajustaElemento(1, 7)
19. HEAP SORT Ajuste de Elementos • Executa até que o elemento seja transferido para uma posição i > ën/2û – após a posição ën/2û , o elemento já é um nodo folha
20. HEAP SORT Etapa de Ordenação • A cada iteração seleciona o maior elemento do heap (sempre está na primeira posição) e o troca com o elemento no final do segmento não-ordenado • Após a troca, o novo elemento raiz do heap deve ser ajustado (deve-se chamar ajustaElemento para o nodo raiz) • O processo termina quando o heap tiver somente 1 elemento (vetor ordenado)
23. FIM Referências: Wikipédia Vimeo.com Ordenação de Dados(III) UFSC-CTC-INE INE5384 - Estruturas de Dados Prof. Ronaldo S. Mello UNICAMP Fernando Ferreira