• Nenhum resultado encontrado

Algoritmos de ordenação: Bubblesort e Mergesort

N/A
N/A
Protected

Academic year: 2022

Share "Algoritmos de ordenação: Bubblesort e Mergesort"

Copied!
49
0
0

Texto

(1)

Algoritmos de ordenação:

Bubblesort e Mergesort

Algoritmos e Estruturas de Dados I

Natália Batista

https://sites.google.com/site/nataliacefetmg/

nataliabatista@decom.cefetmg.br

2º semestre/ 2017

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS

Slides adaptados dos slides do livro texto (Ziviani) e dos slides de aula dos professores Davi Menotti (DECOM/UFOP), Antônio Alfredo Ferreira Loureiro (DCC/UFMG) e Jairo Francisco de Souza (UFJF).

(2)

2

1. Bubblesort

 Princípio:

 Chaves na posição 1 e 2 são comparadas e trocadas se estiverem fora de ordem.

 Processo é repetido com as chaves 2 e 3, até

n − 1 e n.

(3)

3

1. Bubblesort

 Método da Bolha.

 Se desenharmos o vetor de

armazenamento verticalmente, com A[n] em cima e A[1] embaixo, durante um passo do algoritmo, cada registro

“sobe” até encontrar outro com chave maior, que por sua vez sobe até

encontrar outro maior ainda, etc, com um movimento semelhante a uma bolha subindo em um tubo de ensaio.

Fonte: http://clipart-library.com/data_images/27367.jpg

(4)

4

1. Bubblesort

 Algoritmo: void Bubblesort(int *A, int n) {

int i, j;

int aux;

for (j=0; j<n-1; j++){

for (i=0; i<n-1; i++){

if (A[i] > A[i+1]){

aux = A[i];

A[i] = A[i+1];

A[i+1] = aux;

}

}

}

}

(5)

5

1. Bubblesort

 Exemplo: considere um vetor com 8 elementos (numerados de 1 a 8).

1 2 3 4 5 6 7 8

44 55 12 42 94 18 6 67

(6)

6

1. Bubblesort

(7)

7

1. Bubblesort

(8)

8

1. Bubblesort

(9)

9

1. Bubblesort

(10)

10

1. Bubblesort

(11)

11

1. Bubblesort

(12)

12

1. Bubblesort

(13)

13

1. Bubblesort

(14)

14

1. Bubblesort

(15)

15

1. Bubblesort

(16)

16

1. Bubblesort

(17)

17

1. Bubblesort

(18)

18

1. Bubblesort

(19)

19

1. Bubblesort

(20)

20

1. Bubblesort

(21)

21

1. Bubblesort

(22)

22

1. Bubblesort

(23)

23

1. Bubblesort

(24)

24

1. Bubblesort

(25)

25

1. Bubblesort

As iterações continuam de forma semelhante...

(26)

26

(27)

27

As iterações continuam mas o vetor já está ordenado...

(28)

28

1. Bubblesort

 Este método faz tantas trocas que o tornam o mais ineficiente de todos os métodos simples ou diretos.

 Método lento:

Só compara posições adjacentes.

 Cada passo aproveita muito pouco do que foi

“aprendido” sobre o arquivo no passo anterior.

 Comparações redundantes em excesso

devido a uma sequência fixa de comparações.

(29)

29

1. Bubblesort

 Melhor caso: C(n) = O(n 2 )

 Ocorre quando o arquivo está completamente ordenado, fazendo n − 1 comparações e

nenhuma troca em cada iteração do anel externo.

 Pior caso: C(n) = O(n 2 )

 Ocorre quando o arquivo está em ordem reversa,

ou seja, quando o k-ésimo passo faz n − k trocas

em cada iteração do anel externo.

(30)

30

1. Bubblesort

 Outras versões melhoradas do Bubblesort são mais eficientes:

 O(n) no melhor caso no número de comparações.

 O algoritmo pode ser melhorado considerando o fato de que na j-ésima iteração o maior elemento é encontrado e colocado em seu lugar definitivo no vetor.

Logo, todos os elementos que estão após a

última troca já estão ordenados.

(31)

31

1. Bubblesort

 Vantagens:

Simplicidade do algoritmo.

Estável.

 Desvantagens:

Lentidão.

 Indicações:

Tabelas muito pequenas.

Quando se sabe que a tabela está quase ordenada.

Demonstrações didáticas.

(32)

32

2. Mergesort

 Intercalação: operação de unir dois arquivos ordenados gerando um terceiro arquivo ordenado (merge).

 Consiste em colocar no terceiro arquivo o menor elemento entre os menores dos dois arquivos iniciais, desconsiderando este mesmo elemento nos passos posteriores.

 Este processo deve ser repetido até que todos

os elementos dos arquivos de entrada sejam

escolhidos.

(33)

33

2. Mergesort

 Exemplo de intercalação:

(34)

34

2. Mergesort

 Abordagem divisão e conquista:

 Dividir a entrada em conjuntos menores

 Resolver cada instância menor de maneira recursiva

 Reunir as soluções parciais para compor a

solução do problema original.

(35)

35

2. Mergesort

 Princípio:

 Dividir recursivamente o vetor a ser ordenado em dois vetores até obter n vetores de um único

elemento.

 Intercalar dois vetores de um elemento formando um vetor ordenado de dois elementos.

 Repetir o processo formando vetores cada vez

maiores, até ordenar todo o vetor.

(36)

36

Fonte: VineetKumar at English Wikipedia - Transferred from en.wikipedia to Commons by Eric Bauman using CommonsHelper., Public Domain, https://commons.wikimedia.org/w/index.php?curid=8004317

(37)

37

2. Mergesort

 Considere a sequência de inteiros v[0..n-1] = a 0 , a 1 , ..., a n-1 .

 Considere n como uma potência de 2.

 Intercalação: método merge

 Recebe como entrada duas sequências ordenadas v[i..m] e v[m+1..j].

 Produz outra sequência ordenada com os

elementos das sequências de entrada.

(38)

38

2. Mergesort

 Método merge(v, i, m, j):

 Seleciona repetidamente o menor dentre os menores elementos restantes em v[i..m] e v[m+1..j].

 Quando houver empate, retira de uma delas.

 Requer n-1 comparações, onde n é o número

total de elementos em v[i..j].

(39)

39

2. Mergesort

void Merge(Vetor A, int i, int m, int j){

Vetor B;

int x;

int k = i;

int l = m+1;

for (x=i;x<=j;x++) B[x] = A[x];

x = i;

while (k<=m && l<=j) { if (B[k] <= B[l]) A[x++] = B[k++];

else

A[x++] = B[l++];

}

while (k<=m) A[x++] = B[k++];

while (l<=j) A[x++] = B[l++];

}

(40)

40

2. Mergesort

 Método mergesort(v, i, j):

 ordena a subsequência de inteiros v[i..j] = a

i

, a

i+1

, ..., a

j

,

assumindo que seu comprimento é 2

k

para algum

k 0.

(41)

41

2. Mergesort

void Mergesort(Vetor A, int i, int j){

int m;

if (i < j){

m = (i + j - 1) / 2;

Mergesort(A, i, m);

Mergesort(A, m + 1, j);

Merge(A, i, m, j);

/*Intercala A[i..m] e A[m+1..j] em A[i..j] */

}

}

(42)

42

2. Mergesort

6 2 8 5 10 9 12 1 15 7 3 13 4 11 16 14

2 6 8 5 10 9 12 1 15 7 3 13 4 11 16 14

2 6 5 8 10 9 12 1 15 7 3 13 4 11 16 14

2 5 6 8 10 9 12 1 15 7 3 13 4 11 16 14

2 5 6 8 9 10 12 1 15 7 3 13 4 11 16 14

2 5 6 8 9 10 1 12 15 7 3 13 4 11 16 14

2 5 6 8 1 9 10 12 15 7 3 13 4 11 16 14

1 2 5 6 8 9 10 12 15 7 3 13 4 11 16 14

1 2 5 6 8 9 10 12 7 15 3 13 4 11 16 14

1 2 5 6 8 9 10 12 7 15 3 13 4 11 16 14

1 2 5 6 8 9 10 12 3 7 13 15 4 11 16 14

1 2 5 6 8 9 10 12 3 7 13 15 4 11 16 14

1 2 5 6 8 9 10 12 3 7 13 15 4 11 14 16

1 2 5 6 8 9 10 12 3 7 13 15 4 11 14 16

1 2 5 6 8 9 10 12 3 4 7 11 13 14 15 16

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

(43)

43

2. Mergesort

 Análise: na contagem de comparações, o

comportamento do Mergesort pode ser

representado por

(44)

44

2. Mergesort

(45)

45

2. Mergesort

 Adicionando lado a lado:

Pela condição de parada T(1) = 0, temos que:

T(n/2

i

) = 0.

Logo i = log n.

(46)

46

2. Mergesort

E usando o somatório:

(47)

47

2. Mergesort

 Temos que:

(48)

48

2. Mergesort

 Vantagens:

 MergeSort é O(n log n).

 Indicado para aplicações que exigem restrição de tempo.

 Estável.

 Fácil Implementação.

 Desvantagens:

 Utiliza memória auxiliar.

(49)

49

Referências

Ziviani, N. Projeto de algoritmos: com implementações em Java e C++. 3 ed. Editora Cengage Learning, 2007.

Goodrich, M. T. e Tamassia, R. Estruturas de Dados &

Algoritmos. Editora Bookman, 2013.

Loureiro, A. A. F. Projeto e Análise de Algoritmos:

Análise de Complexidade. Notas de aula, 2010.

Menotti, D. Ordenação. Notas de aula, 2009.

Souza, J. F. Método BubbleSort. Notas de aula, 2016.

Souza, J. F. Algoritmo MergeSort. Notas de aula, 2016.

Referências

Documentos relacionados

Essa requalificação foi realizada de forma diferente por dois autores que têm em Schumpeter uma referência teórica importante: Penrose e Chandler. Se para Schumpeter coloca-se

Seguindo a orientação da citação acima, as mudanças que identificamos nas configurações observadas se aproximam do que a autora identifica como redimensionamento da

O Pós-Positivismo, ao reabilitar o uso da razão prática e inseri-la na metodologia de aplicação do Direito, propõe a possibilidade de se definir a norma aplicável ao caso concreto

Busca inspirar todos os povos a um novo sentido de interdependência global e responsabilidade compartilhada voltado para o bem-estar de toda a família humana, da grande comunidade

O modelo conceitual procura mostrar quais são os elementos de informação tratados pelo sistema, para que mais adiante se possa mostrar ainda como essa informação é transformada pelo

Seu legado, reinventado pelos que, à feição de Sor Juana, Larbaud, Bressane, Greenaway e o próprio Haroldo, elegem-no como precursor (ou santo protetor), será sempre uma

Entretanto, a onisciência de Mandrake, construída a partir de textos, não nos leva a crer no seu relato como revelador de uma verdade última, ao contrário, sua narrativa é vista,