Você está na página 1de 11

ESTRUTURA DE DADOS

ALGORITMOS DE ORDENAO
Francisco Bruno alfimcz@gmail.com

Bubble Sort - Viso geral

Introduo

O bubble sort, ou ordenao por flutuao (literalmente "por bolha"), um algoritmo de ordenao dos mais simples, usado para ordenar arrays ou listas encadeadas. A ideia percorrer o vector diversas vezes, a cada passagem fazendo flutuar para o topo o maior elemento da sequncia. Essa movimentao lembra a forma como as bolhas em um tanque de gua procuram seu prprio nvel, e disso vem o nome do algoritmo. A complexidade desse algoritmo de Ordem quadrtica. Por isso, ele no recomendado para programas que precisem de velocidade e operem com quantidade elevada de dados.

Bubble Sort - Viso geral

Introduo

O algoritmo BubbleSort consiste em se percorrer o vetor a ser ordenado vrias vezes, comparando-se cada elemento com o seguinte, permutando suas posies se eles no estiverem na ordem pretendida. Assim, cada vez que o vetor percorrido, o maior elemento (ou o menor, se a ordenao for feita em ordem decrescente) ainda no ordenado, colocado na sua posio de ordenao definitiva. Naturalmente, o vetor ser percorrido at que no haja mais trocas a se fazer, quando ento ele estar ordenado. Por exemplo, se o vetor a ser ordenado em ordem crescente fosse v = {5, 1, 9, 3, 7, 2}, teramos as seguintes configuraes para v, de acordo com a ordem de percurso:

Bubble Sort - Viso geral

Introduo

Bubble Sort Pseudo-cdigo

O algoritmo pode ser descrito em pseudo-cdigo como segue abaixo. V um VECTOR de elementos que podem ser comparados e n o tamanho desse vector.
houveTroca <- verdade houveTroca <- falso # uma varivel de controle

BUBBLESORT (V[], n) enquanto houveTroca for verdade faa:

para i de 1 at n-1 faa:


se V[i] eh maior que V[i + 1] ento troque V[i] e V[i + 1] de lugar e houveTroca <- verdade

Bubble Sort Exemplo


public static void ordena(int[] vetor) { boolean trocou = true; int aux = 0; while (trocou) { trocou = false; for (int i = 0; i < (vetor.length - 1); i++) { if (vetor[i] > vetor[i + 1]) { aux = vetor[i]; vetor[i] = vetor[i + 1]; vetor[i + 1] = aux; trocou = true; }

}
} }

Bubble Sort Comentrios

Observe que a varivel flag verifica se houve alguma troca para que outro percurso seja realizado. Observe tambm que o comando t := t 1 se justifica pelo fato de que no percurso de ordem i, i 1 elementos j esto em suas posies definitivas.

Bubble Sort Com e Sem Flag


No melhor caso, o algoritmo executa n2(quadrado) / 2 operaes relevantes, onde n representa o nmero de elementos do vector. No pior caso, so feitas 2*n2(quadrado) operaes. No caso mdio, so feitas 5*n2(quadrado) / 2 operaes. O uso da flag consiste em parar o processo logo que se detecte que, ao longo de uma passagem, no houve troca alguma.

Bubble Sort - Estratgia

Identificar todos os pares de elementos contguos tais que v[i] > v[i+1] e troc-los.

Bubble Sort - Exemplo

Implementar junto com a turma o algoritmo sem o uso de flag. Vamos implementar um programa para usar a procedure do Slide n. 6. Para exemplificar o uso da flag. Criar um programa em Java para que dado o vector V qualquer, de nmeros inteiros (ex.: 3,5,4,1,9,6,7,2) ordene este vector utilizando o Bubble Sort e ao final informe quantas vezes o vector precisou ser percorrido para poder ordenar os nmeros.

Bubble Sort Mo na massa

Escreva um programa em Pascal que dado um Vector de 20 posies de um tipo definido pelo programador como abaixo: type Animal = record especie: String; nome: String;

end;
Leia de maneira desordenada at 20 animais (espcie e nome) e em seguida imprima uma relao dos animais cadastrados ordenados por espcie.

Você também pode gostar