Buscar

Introdução Ordenação e BubbleSort

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Presbiteriana Mackenzie
Métodos de Ordenação: 
Introdução e o BubbleSort
Profa. Ana Cristina dos Santos
Faculdade de Computação e Informática
Linguagem de Programação I
1
Motivação
• 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;
– Identificar o CPF de um contribuinte;
– 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...
2Introdução e BubbleSort
Definição
• Ordenar é o processo de reorganizar um conjunto de
objetos em um ordem ascendente ou descendente,
segundo algum critério.
• O objetivo da ordenação ou classificação é facilitar a
recuperação posterior de itens do conjunto ordenado.
• A maioria dos métodos de ordenação é baseada em 
comparações das chaves.
3Introdução e BubbleSort
Notação
• Os algoritmos trabalham sobre os registros de um 
arquivo.
• Cada registro possui uma chave utilizada para controlar 
a ordenação.
• Podem existir outros componentes em um registro.
• Qualquer tipo de chave sobre o qual exista uma regra de 
ordenação bem definida pode ser utilizado.
• A maioria dos métodos de ordenação é baseada em 
comparações das chaves. 
• Existem métodos de ordenação que utilizam o princípio 
da distribuição.
4Introdução e BubbleSort
Classificação
Os algoritmos de ordenação podem ser:
• Ordenação interna: se os registros a serem ordenados estiverem 
na RAM, qualquer registro pode ser imediatamente acessado.
• Ordenação externa: se os registros a serem ordenados estiverem 
em armazenamento auxiliar (disco), em que os registros são 
acessados sequencialmente ou em grandes blocos.
5Introdução e BubbleSort
Estabilidade
Os algoritmos de ordenação podem ser:
• Um método de ordenação é estável se a ordem relativa 
dos itens com chaves iguais não se altera durante a 
ordenação.
• Alguns dos métodos de ordenação mais eficientes não 
são estáveis.
• A estabilidade pode ser forçada quando o método é 
não-estável.
6Introdução e BubbleSort
Estabilidade
Exemplo:
• Se uma lista alfabética de nomes de funcionários de 
uma empresa é ordenada pelo campo salário, então um 
método estável produz uma lista em que os 
funcionários com o mesmo salário aparecem em ordem 
alfabética
7Introdução e BubbleSort
Ordenação Interna
• Métodos simples:
– Adequados para pequenos arquivos.
– Requerem O(n2) comparações.
– Produzem programas pequenos.
• Métodos eficientes:
– Adequados para arquivos maiores.
– Requerem O(n log n) comparações.
– Usam menos comparações.
– As comparações são mais complexas nos detalhes.
– Métodos simples são mais eficientes para pequenos 
arquivos.
8Introdução e BubbleSort
Métodos de Ordenação Interna
• Métodos simples:
– Bolha (BubbleSort)
– Seleção do Mínimo ou do Máximo (Selection Sort)
– Inserção Direta (Insertion Sort)
• Métodos eficientes:
– Quicksort
– Mergesort
9Introdução e BubbleSort
Análise de Desempenho
• A eficiência de tempo é calculada pelo número de
operações críticas efetuadas.
• Operações críticas:
 comparação entre chaves
 movimentação de registros ou de ponteiros para
registros
 troca de dois registros
10Introdução e BubbleSort
Categorias Métodos de Ordenação
• Classificação por Trocas
– Bolha (BubbleSort)
– QuickSort
• Classificação por Seleção
– Seleção do Mínimo ou do Máximo
• Classificação por Inserção
– Inserção Direta
• Classificação por Intercalação
– MergeSort
11Introdução e BubbleSort
Principais Categorias de Métodos
– Classificação por Trocas
– Classificação por Seleção
– Classificação por Inserção
– Classificação por Intercalação
12Introdução e BubbleSort
Classificação por Trocas
• Caracteriza-se pela comparação aos pares de chaves,
trocando-as de posição caso estejam fora de ordem
no par.
• Principais algoritmos
– BubbleSort (Bolha)
– QuickSort
13Introdução e BubbleSort
Convenção
• Veremos alguns algoritmos e técnicas de ordenação. Cada 
um apresenta diferentes soluções para o mesmo 
problema: ordenar um conjunto de dados. 
• Devido a essa variedade de soluções e complexidades, eles 
podem ter variações no desempenho. Porém, cabe agora, 
estudar apenas essas soluções.
• Por convenção, consideraremos vetores de números, ao 
invés de registros. Porém, sabe-se que, esses números 
estariam representados as chaves dos registros 
armazenados em uma tabela. 
• Essa convenção facilita o entendimento das soluções 
apresentadas.
14Introdução e BubbleSort
15
Especificação do Problema
• Dado um conjunto com N elementos do mesmo tipo 
de dado armazenados em um vetor V, rearranjar os 
elementos do vetor de forma que seus elementos 
fiquem ordenados, em ordem crescente ou 
decrescente
Introdução e BubbleSort
16
Método Bolha ou BubbleSort
• Mais lento
• Mais simples conceitualmente
• Funciona através da comparação de 
elementos dois a dois, percorrendo a 
estrutura toda até que esteja ordenado
Introdução e BubbleSort
17
Método Bolha - Estratégia
• Em cada iteração, 
– “Borbulhar” o maior elemento para o final do vetor,
– Percorrendo o vetor da primeira posição até a final (da 
esquerda para a direita).
– Comparando pares de elementos consecutivos, 
trocando de lugar os que estão fora de ordem
– O final da porção não ordenada do vetor diminui a cada 
vez que um elemento máximo chega ao fim
Introdução e BubbleSort
Iteração 1 – Levar o maior elemento para o fim do vetor
43210
1a Iteração
2550803060
25508060302a Iteração
25508060303
a Iteração
4a Iteração
2580506030
8025506030
18Introdução e BubbleSort
8025605030
8025506030
Iteração 2 – Levar o maior elemento para o fim do vetor
43210
8025506030
1a Iteração
2a Iteração
3a Iteração
8060255030
19Introdução e BubbleSort
8060502530
8060255030
Iteração 3 – Levar o maior elemento para o fim do vetor
43210
8060255030
1a Iteração
2a Iteração
20Introdução e BubbleSort
43210
8060502530
Iteração 4 – Levar o maior elemento para o fim do vetor
1a Iteração
8060503025
21Introdução e BubbleSort
22
Desempenho do BubbleSort
• Quantas iterações tenho que fazer?
– Em cada iteração, quantas comparações dois a 
dois são feitas?
– No final de cada iteração, qual o resultado?
Introdução e BubbleSort
Desempenho do BubbleSort
• Melhor caso
Quando o vetor já se encontra ordenado  nenhuma troca
ocorre na primeira varredura.
Custo linear: n - 1 comparações
• Pior caso
Quando o vetor se encontra na ordem inversa a desejada.
A cada varredura apenas uma chave será colocada em sua
posição definitiva.
23Introdução e BubbleSort
Desempenho do BubbleSort
• Pior caso
Qtd de Comparações Trocas
Iterações efetuadas efetuadas
1 n - 1 n - 1
2 n - 2 n - 2
3 n - 3 n - 3
... ... ...
n - 1 1 1
( n2 - n )/2 ( n2 - n )/2
Cmédio = ( Cpior + Cmelhor ) / 2
= (( n2 - n ) / 2 )+ ( n - 1 ))/ 2
= ( n2 + n - 2 ) / 4
O (n2)
Total: ( n2 - n )/2 = O (n2)
24Introdução e BubbleSort
Método BubbleSort
public void bubbleSort (int [] v){
for (int i = 0; i < v.length -1 ; i++)
for (int j = 0; i < v.length-1-i ; j++)
if (v[j] > v[j+1])
troca (v, j, j+1);
}
public void troca ( int[] v, int i, int j){
int temp = v[i];
v[i] = v[j];
v[j] = temp;
}
25Introdução e BubbleSort
26
Sobrecargapublic void bubbleSort (int[] v){
bubbleSort (v, v.length);
}
Introdução e BubbleSort
Invocando o Método bubbleSort
public static void main(String[] args){
int[] v;
v = new int[50];
…
package.Sort.bubbleSort(v);
...
}
27Introdução e BubbleSort
Invocando o Método bubbleSort
import package.*;
public static void main(String[] args){
int[] v;
v = new int[50];
Sort.bubbleSort(v,n);
...
}
28Introdução e BubbleSort
Invocando o Método bubbleSort
import static package.Sort.*;
public static void main (String[] args){
int[] v;
v = new int[50];
bubbleSort(v,n);
...
}
29Introdução e BubbleSort
Método BubbleSort
Método da Bolha Melhorado: Termina execução quando nenhuma 
troca é realizada após uma passada pelo vetor
public void bubbleSort (int [] v){
boolean flag=true;
for (int i = 0; i < (v.length -1)&&(flag==true) ; i++){ 
flag=false;
for (int j = 0; i < v.length-1-i ; j++)
if (v[j] > v[j+1]){
troca (v, j, j+1);
flag=true;
}
}
}
30Introdução e BubbleSort
Exercícios
• Faça um teste de execução do método de ordenação bolha para:
– V={30, 40, 50, 20,10}
• Construa o método main que leia dados para um vetor com n 
elementos e os ordena.
• Quantas operações críticas (comparações + trocas) foram 
necessárias ?
• Quantas varreduras são necessárias para detectar que o vetor 
acima está classificado ?
• Informe a complexidade do algoritmo BubbleSort nos casos: 
Melhor, Pior e Caso Médio.
31Introdução e BubbleSort
Algoritmos Animados - Sites
http://www.csse.monash.edu.au/~dwa/Anima
tions/index.html
http://math.hws.edu/TMCM/java/xSortLab/
32Introdução e BubbleSort

Outros materiais