Algoritmos de Ordenação Estrutura de Dados Algoritmos de Ordenação Registros (Estrutura de Dados Heterogêneas)
Visão Global O conceito de um conjunto ordenado de elementos tem considerável impacto sobre nossa vida cotidiana. Exemplos: Localizar um número telefônico em catálogo; Procurar um livro em biblioteca tradicional ou virtual; Saber qual o próximo documento a ser impresso pela impressora em um departamento da empresa; Saber qual o próximo processo a ser executado pelo processador de uma máquina qualquer; etc...
Introdução Algoritmo de ordenação em ciência da computação é um algoritmo que coloca os elementos de uma dada sequência em uma certa ordem. Em outras palavras, efetua sua ordenação completa ou parcial. Existem várias razões para se ordenar uma seqüência Uma delas é a possibilidade se acessar seus dados de modo mais eficiente. Além de permitir seu agrupamento em classes e ainda a atualização de arquivos seqüenciais 3
Algoritmos de ordenação 1- Bubble sort 2- Selection Sort 3 – Insertion Sort 4 - Quick sort (vocês já viram) 5 - Shell sort (Pesquisa do aluno) 6 - Merge sort (Pesquisa do aluno) 7 - Radix sort (Pesquisa do aluno)
Bubble sort Compara dois elementos consecutivos de um vector e se o da esquerda é maior que o da direita trocam de posição. Quando existem trocas, os elementos maiores tendem a deslocar-se para a direita e os menores para a esquerda. 5
Exemplo – BubbleSort (1/3) Suponha que se deseja classificar em ordem crescente o seguinte vetor de chaves [28, 26, 30, 24, 25]. Primeira Varredura 28 26 30 24 25 compara par (28, 26): troca 26 28 30 24 25compara par (28, 30): não troca 26 28 30 24 25 compara par (30, 24): troca 26 28 24 30 25 compara par (30, 25): troca 28 24 25 30 Maior chave em sua posição definitiva fim da primeira varredura
Exemplo – BubbleSort (2/3) Vetor inicial de chaves [28, 26, 30, 24, 25]. Resultado do fim da primeira varredura 26 28 24 25 30 Segunda Varredura 26 28 24 25 30 compara par (26, 28) : não troca 26 28 24 25 30 compara par (28, 24) : troca 26 24 28 25 30 compara par (28, 25) : troca 24 25 28 30 (não precisa comparar) fim da segunda varredura
Exemplo – BubbleSort (3/3) Vetor de chaves [28, 26, 30, 24, 25] a ser ordenado. Resultado do fim da segunda varredura 26 24 25 28 30 Terceira Varredura 26 24 25 28 30 compara par (26, 24) : troca 24 26 25 28 30 compara par (26, 25) : troca 25 26 28 30 (não precisa comparar) Fim da terceira varredura Durante a quarta varredura, nenhuma troca ocorrerá e a execução do algoritmo terminará.
Bubble sort - Implmentação private void bubblesort(int vetor[]) { int temp; boolean alterado = true; imprimir(vetor); while (alterado) { temp = 0; alterado = false; for (int j = 0; j < vetor.length - 1; j++) { if (vetor[j] > vetor[j + 1]) { temp = vetor[j + 1]; vetor[j + 1] = vetor[j]; vetor[j] = temp; alterado = true; } 9
Conclusões Os algoritmos de ordenação por bolha: → São muito simples → Eficazes apenas para uma pequena quantidade de dados. ■ Realiza um grande número de comparações pelo vetor para ser ordenado; 10