83
Algoritmos e Estrutura de Dados Fabrício Olivetti de França 02 de Fevereiro de 2019

Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Algoritmos e Estrutura de Dados

Fabrício Olivetti de França

02 de Fevereiro de 2019

Page 2: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Topics

1. Algoritmos de Ordenação

2. Algoritmos Simples

1

Page 3: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Algoritmos de Ordenação

Page 4: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

Ordenação: substantivo feminino, arranjo, distribuição metódica,organizada; ordem.

2

Page 5: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

Ordenação (na computação): organizar registros em ordemascendente ou descendente.

3

Page 6: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

• Encontrar registros similares (de acordo com sua chave).• Rank de pontuação (ex.: Enem, competição, etc.)• Interseção de arquivos.• Busca (nossas melhores buscas partiam de registrosordenados).

4

Page 7: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

Dado um conjunto de registros:

R1, R2, . . . , Rn

cada qual com uma chave Ki.

5

Page 8: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

Desejamos encontrar uma permutação π(R) tal que:

Kπ(1) ≤ Kπ(2) ≤ . . . ≤ Kπ(n)

6

Page 9: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

Para isso precisamos estabelecer uma relação binária (K, ≤) de talforma que seja possível ordenar nosso conjunto.

7

Page 10: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Pre-ordem

Essa relação é uma pré-ordem se temos as propriedades:

• Identidade: para todo Ki ∈ K, Ki ≤ Ki.• Transitividade: se Ki ≤ Kj e Kj ≤ Kl, então Ki ≤ Kl.• Associatividade: (Ki ≤ Kj) ≤ Kl =⇒ Ki ≤ (Kj ≤ Kl).

Notem que na pré-ordem podemos ter casos em que um certo Ki nãotem relação com um Kj.

8

Page 11: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Ordem parcial

Essa relação se torna uma ordem parcial ou poset (partially orderedset) se incluírmos a propriedade:

Ki ≤ Kj, Kj ≤ Ki =⇒ Ki = Kj

9

Page 12: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Poset

Coxa

Fabricio Paulo

Cavaleiro

≤ ≤

≤ ≤

10

Page 13: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Ordem total

Finalmente, a ordem total ou ordem linear acrescenta:

∀Ki, Kj ∈ K : Ki ≤ Kj ∨ Kj ≤ Ki

Para nossos algoritmos assumiremos uma ordem total das chavesdos registros.

11

Page 14: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

O algoritmo de ordenação é dito estável se os registros com chavesidênticas mantém sua ordem relativa inicial.

12

Page 15: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

O algoritmo de ordenação é dito in-place se ele ordena sem uso dememória adicional (exceto por uma constante).

13

Page 16: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

O algoritmo de ordenação é dito adaptável se a ordenação atual dosdados influencia a sequência de operações realizadas.

14

Page 17: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

O algoritmo de ordenação é dito online se ele realiza a operação deordenação enquanto recebe novos elementos.

15

Page 18: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

Esses algoritmos também podem ser classificados como:

• Ordenação interna: quando todos os registros estãoarmazenados na memória RAM.

• Ordenação externa: quando apenas parte dos registros podemser alocados na memória RAM.

16

Page 19: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

Os algoritmos de ordenação possuem um limitante em suacomplexidade, as classes de algoritmos baseadas em comparaçãonão conseguem ser melhor do que O(n · log n), enquanto osalgoritmos baseado em contagem podem chegar a O(n) (mas comimplicações).

17

Page 20: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Exercício

Dado um conjunto de cinco registros R1, R2, R3, R4, R5 contendochaves numéricas, escreva um algoritmo para ordenar essas chavesem ordem crescente.

18

Page 21: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Exercício

Dado o tempo curto para resolver o problema, as soluções maisprováveis criadas por vocês são:

1. Insertion sort: cada item é considerado um de cada vez einserido em sua posição correta (como você ordena uma mãode baralho).

2. Exchange sort: se dois itens estão fora de ordem em relação umao outro, troca a posição desses.

3. Selection sort: encontra o menor valor e insere na posiçãoinicial, depois o segundo menor e assim por diante.

4. Enumeration sort: cada item é comparado com todos os outrospara determinar sua posição.

19

Page 22: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Exercício

5. Algoritmo específico: feito com if-else exclusivamente paracinco valores.

6. Preguiçoso: você ignorou o pedido em fazer o exercício e sóesperou a resposta (sinta-se envergonhado!)

7. Um novo algoritmo melhor que todos os outros existentes: saiaimediatamente da aula e vá escrever um artigo!

20

Page 23: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

O problema de ordenação

Existem diversos algoritmos de ordenação, e não existe um algoritmosupremo!

Cada algoritmo possui vantagens em relação a outros dependendoda situação. É importante conhecer tais características para escolhero algoritmo que irá utilizar.

21

Page 24: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Tipos de Algoritmos de Ordenação

Os algoritmos de ordenação podem ser agrupados como (em itálicoos algoritmos que aprenderemos no curso):

• Contagem: counting sort.• Inserção: insertion sort, binary insertion sort, shellsort.• Troca: bubble sort, quick sort.• Seleção: selection sort, heap sort.• Mistura: merge sort• Distribuição: radix sort, bucket sort.

22

Page 25: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Base dos algoritmos de ordenação

Vamos supor uma estrutura de registro com uma chave e um campode dados:

typedef struct registro {int key;int data;

} registro;

23

Page 26: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Base dos algoritmos de ordenação

Todo algoritmo de ordenação terá a seguinte assinatura de função:

void sort(registro *base, int n);

No laboratório vamos ver como deixar o algoritmo genérico paraqualquer estrutura.

24

Page 27: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Algoritmos Simples

Page 28: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Algoritmos Simples

Na aula de hoje iremos aprender sobre três algoritmos simples, eineficientes de ordenação: insertion sort, bubble sort e selectionsort.

25

Page 29: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Talvez a ideia mais trivial é a de ordenar os elementos assim comoordenamos uma mão de cartas de baralho.

Figura 1: FONTE: http://pngimg.com/download/48302

26

Page 30: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Parte da premissa que se os elementos de 0 a k − 1 já estãoordenados, o próximo passo consiste em mover o elemento k parasua posição correta.

27

Page 31: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Para k = 1, temos que a lista até k − 1 possui um único elemento, eela está ordenada!

0 1 2 3 4 5 6 7 888 56 100 2 25 32 1 99 21

k − 1 k

28

Page 32: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Ao inserir o elemento k na posição correta, temos que a lista de 0 a kagora está ordenada!

0 1 2 3 4 5 6 7 856 88 100 2 25 32 1 99 21

k − 1 k

29

Page 33: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Repetimos para k = 2.

0 1 2 3 4 5 6 7 856 88 100 2 25 32 1 99 21

k − 1 k

Nada a fazer!

30

Page 34: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Repetimos para k = 3.

0 1 2 3 4 5 6 7 856 88 100 2 25 32 1 99 21

k − 1 k

Qual procedimento utilizar?

31

Page 35: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Basta começar de i = k − 1 e fazer a troca entre os elementos i ei+ 1 caso Ki > Ki+1. Ao encontrar um caso falso, pare! (Por que?)

32

Page 36: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Com esse procedimento, temos que fazer três atribuições pormovimento (o swap). Podemos melhorar!

33

Page 37: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Armazenamos o registro i+ 1 em uma variável e simplesmentemovemos uma casa para direita todo registro i = k − 1 . . . 0 cujachave seja maior que a chave armazenada.

34

Page 38: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

void insert(registro *base, int k) {registro x = base[k];--k;

while (k >= 0 && base[k].key > x.key){

base[k+1] = base[k];--k;

}base[k+1] = x;

}

35

Page 39: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Repetimos para k = 3. Guardamos o registro com chave 2 emovemos os elementos maiores para direita.

0 1 2 3 4 5 6 7 856 88 100 2 25 32 1 99 21

2

k

36

Page 40: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Repetimos para k = 3. Guardamos o registro com chave 2 emovemos os elementos maiores para direita.

0 1 2 3 4 5 6 7 856 88 100 100 25 32 1 99 21

2

k

37

Page 41: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Repetimos para k = 3. Guardamos o registro com chave 2 emovemos os elementos maiores para direita.

0 1 2 3 4 5 6 7 856 88 88 100 25 32 1 99 21

2

k

38

Page 42: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Repetimos para k = 3. Guardamos o registro com chave 2 emovemos os elementos maiores para direita.

0 1 2 3 4 5 6 7 856 56 88 100 25 32 1 99 21

2

k

39

Page 43: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Repetimos para k = 3. Guardamos o registro com chave 2 emovemos os elementos maiores para direita.

0 1 2 3 4 5 6 7 82 56 88 100 25 32 1 99 21

2

k

40

Page 44: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Com essa operação bem definida, o algoritmo de ordenação InsertionSort é a repetição desse movimento iniciando em k = 1 até n:

void insertionSort(registro *base, int n) {int k = 1;

while (k < n){

insert(base, k);++k;

}}

41

Page 45: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Insertion Sort

Insert

estávelin-placeonlineadaptivo

42

Page 46: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Complexidade Assintótica

Para cada um dos n elementos precisamos fazer até k operações,com isso esse algoritmo tem complexidade O(k · n). Mas quanto é ovalor de k?

43

Page 47: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Complexidade Assintótica

No melhor, os registros já estão ordenados, então não temos quefazer nada e k = 1, temos então uma complexidade O(n).

44

Page 48: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Complexidade Assintótica

No pior, temos os registros em ordem inversa, então temos que osvalores de k seguem a sequência 1, 2, 3, . . . , n. Com isso temos:∑n

k=1 k =n·(n+1)

2

Ou seja, no pior temos complexidade O(n2).

45

Page 49: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Complexidade Assintótica

No médio, vamos imaginar uma variável xij que tem valor 1 casoKi > Kj e, portanto, o elemento i será movido para direita, e 0, casocontrário.

46

Page 50: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Complexidade Assintótica

Precisamos descobrir o valor esperado da somatória de todos ospares i, j para determinar quantas trocas faremos em média:

m = E[∑

xij] =∑

E[xij] =∑

12= n·(n+1)

4

Ou seja, temos um médio O(n2).

47

Page 51: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Complexidade Assintótica

O algoritmo Insertion Sort é mais rápido do que muitos algoritmosde menor complexidade para os casos em que:

• A lista já está quase ordenada.• A lista é pequena (o quão pequena depende do processador,compilador e outros fatores, uma regra do dedão diz quen = 10).

48

Page 52: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Complexidade Assintótica

Insertion

melhor O(n)pior O(n2)

médio O(n2)

49

Page 53: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

No algoritmo Insertion Sort, pegamos um elemento e afundamos eleaté seu lugar na parte mais baixa de nossa array.

Uma outra estratégia simples é pegar cada elemento e flutuarmosele até seu lugar na parte mais alta, essa estratégia é conhecidacomo Bubble Sort.

50

Page 54: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

Basicamente, o algoritmo pode ser descrito em sua forma maisabstrata como:

void bubbleSort(registro *base, int n) {while (bubbleUp(base, n));

}

51

Page 55: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

A cada passo da repetição, trocamos (swap) cada elemento i pelo seuvizinho i+ 1 caso eles estejam desordenados.

52

Page 56: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

char bubbleUp(registro *base, int n) {char changed = 0;for (int i=0; i<n-1; i++){

if (base[i].key > base[i+1].key){

swap(base+i, base+i+1);changed = 1;

}}return changed;

}

53

Page 57: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

0 1 2 3 4 5 6 7 888 56 100 2 25 32 1 99 21

i i+ 1

54

Page 58: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

0 1 2 3 4 5 6 7 856 88 100 2 25 32 1 99 21

i i+ 1

55

Page 59: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

0 1 2 3 4 5 6 7 856 88 100 2 25 32 1 99 21

i i+ 1

56

Page 60: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

0 1 2 3 4 5 6 7 856 88 2 100 25 32 1 99 21

i i+ 1

57

Page 61: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

0 1 2 3 4 5 6 7 856 88 2 25 100 32 1 99 21

i i+ 1

58

Page 62: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

0 1 2 3 4 5 6 7 856 88 2 25 32 100 1 99 21

i i+ 1

59

Page 63: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

0 1 2 3 4 5 6 7 856 88 2 25 32 1 100 99 21

i i+ 1

60

Page 64: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

0 1 2 3 4 5 6 7 856 88 2 25 32 1 99 100 21

i i+ 1

61

Page 65: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

0 1 2 3 4 5 6 7 856 88 2 25 32 1 99 21 100

62

Page 66: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

Otimização: note que a função bubbleUp sempre deixa o últimoelemento na posição correta, portanto não precisamos fazer ascomparações dos elementos já ordenados. A cada passo i,verificamos apenas até n − i.

63

Page 67: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Bubble Sort

Insert Bubble

estávelin-placeonlineadaptivo

64

Page 68: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Complexidade Assintótica

Insert Bubble

melhor O(n) O(n)pior O(n2) O(n2)

médio O(n2) O(n2)

65

Page 69: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

Um outro algoritmo simples de ordenação é o Selection Sort, a ideiaé simplesmente repetir a busca pelo menor elemento da lista, ecolocá-lo na i-ésima posição, depedendo da iteração.

66

Page 70: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

void selectionSort(registro *base, int n) {int i, j, i_min;

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

i_min = find_min(base + j, n-j) + j;if (i_min != j) swap(base+i_min, base+j);

}}

67

Page 71: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

0 1 2 3 4 5 6 7 888 56 100 2 25 32 1 99 21

j

68

Page 72: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

0 1 2 3 4 5 6 7 81 56 100 2 25 32 88 99 21

j

69

Page 73: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

0 1 2 3 4 5 6 7 81 2 100 56 25 32 88 99 21

j

70

Page 74: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

0 1 2 3 4 5 6 7 81 2 21 56 25 32 88 99 100

j

71

Page 75: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

0 1 2 3 4 5 6 7 81 2 21 25 56 32 88 99 100

j

72

Page 76: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

0 1 2 3 4 5 6 7 81 2 21 25 32 56 88 99 100

j

73

Page 77: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

0 1 2 3 4 5 6 7 81 2 21 25 32 56 88 99 100

j

74

Page 78: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

0 1 2 3 4 5 6 7 81 2 21 25 32 56 88 99 100

j

75

Page 79: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

0 1 2 3 4 5 6 7 81 2 21 25 32 56 88 99 100

j

76

Page 80: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Selection Sort

Insert Bubble Select

estávelin-placeonlineadaptivo

77

Page 81: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Exercício

Verifique a estabilidade do Selection Sort para a sequência4, 2, 3, 4, 1.

78

Page 82: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Complexidade Assintótica

Insert Bubble Select

melhor O(n) O(n) O(n2)

pior O(n2) O(n2) O(n2)

médio O(n2) O(n2) O(n2)

79

Page 83: Algoritmos e Estrutura de Dados - Fabrício Olivetti de FrançaAlgoritmos e Estrutura de Dados Author Fabrício Olivetti de França Created Date 2/1/2019 2:45:46 PM

Próxima aula

Na próxima aula aprenderemos os algoritmos quick sort e mergesort.

80