• Nenhum resultado encontrado

Processo de rearranjar um conjunto de elementos de forma ascendente ou

N/A
N/A
Protected

Academic year: 2019

Share "Processo de rearranjar um conjunto de elementos de forma ascendente ou"

Copied!
61
0
0

Texto

(1)

Universidade Federal do Rio de Janeiro (UFRJ)

Material 3 – Ordenação

(2)
(3)

Tem-se

bons exemplos

de como resolver

problemas através de computador

Serve

para

facilitar

a

recuperação

posterior de itens do conjunto ordenado

Relaciona-se com problemas do

dia a dia

(4)

Bubble Sort:

ordenação por bolha

Insertion Sort:

ordenação por inserção

Selection Sort:

ordenação por seleção

Quick Sort:

ordenação rápida

(5)

Bubble Sort:

ordenação por bolha

Insertion Sort:

ordenação por inserção

Selection Sort:

ordenação por seleção

Quick Sort:

ordenação rápida

Heap Sort:

ordenação cabeça

(6)

Conhecido como o

método da bolha

Um dos algoritmos mais

simples

Algoritmo:

1. Percorra o vetor (ex. lista em python) todo, comparando elementos adjacentes (2 a 2)

2. Troque as posições se eles estiverem fora de ordem

3. Repita os dois primeiros passos até obter a

(7)

Algoritmo Bubble 1:

vamos percorrer a lista 5

vezes (número de elementos), fazendo as

comparações aos pares. Serão feitas 4 comparações por corrida. A ordenação deve ser ascendente.

7

(8)

 Algoritmo Bubble 1: vamos percorrer a lista 5 vezes (nº de elementos), fazendo as comparações aos pares. Serão feitas 4 comparações por corrida.

1 5 0 8 3

1 > 5 F Não troca

1 5 0 8 3

5 > 0 V Troca

1 0 5 8 3

5 > 8 F Não troca

1 0 5 8 3

5 0

Aux

0 0 0 5

Aux

8 3 3 3 3 8

(9)

 Faça um programa, onde o usuário deve informar o

(10)

 Algoritmo Bubble 1: vamos percorrer a lista 5 vezes (nº hipotético de elementos), fazendo as comparações aos pares. Serão feitas 4 comparações ( 5 1 elementos) por corrida.

Análise de complexidade do algoritmo:

5 (5

1) = n (n

1) = n^2

n

=

O(n^2)

=

(11)

No Bubble Sort 1:

1. Percorremos o vetor (ex. lista em python) todo comparando elementos adjacentes (2 a 2)

2. Trocamos as posições quando estavam fora de ordem

3. Repetimos os dois primeiros passos, em um nº de corridas igual ao nº de elementos do vetor

(12)

No Bubble Sort 2 (melhor):

1. Percorrer o vetor (ex. lista em python),

comparando elementos adjacentes (2 a 2)

2. Trocar as posições quando estiverem fora de ordem

(13)

 Algoritmo Bubble 2 (melhor): percorrer a lista pelo menos uma vez. Depois repetir apenas se houve troca. Além disso, as comparações devem ser feitas decrementando sempre um elemento da direita.

13

1 5 0 8 3

1 > 5 F Não troca

1 5 0 8 3

5 > 0 V Troca

1 0 5 8 3

5 > 8 F Não troca

1 0 5 8 3

8 > 3 V Troca

5 0

Aux

0 0 0 5

Aux

8 3

Aux

3 3 3 8

Aux

(14)

 Altere o primeiro programa, de modo que a lista

(15)

 Algoritmo Bubble 2: vamos percorrer a lista no mínimo uma vez e no máximo 4 vezes (5 – 1 elemento), fazendo as comparações aos pares. Serão feitas

n - 1 comparações na 1ª iteração, n-2na 2ª ... até 1 comparação.

Análise de complexidade do algoritmo:

Melhor caso:

1 (5

1) = 1 (n

1) = n

1

=

O(n)

=

(16)

Análise de complexidade do algoritmo:

Pior caso:

(5-1)+(5-2)+(5-3)+(5-4)) =

(n-1)+(n-2)+....+2+1))

= n(n-1+1)/2

O(n^2)

=

Ordem quadrática

 Algoritmo Bubble 2: vamos percorrer a lista no mínimo uma vez e no máximo 4 vezes (5 – 1 elemento), fazendo as comparações aos pares. Serão feitas

(17)

Bubble Sort:

ordenação por bolha

Selection Sort:

ordenação por seleção

Insertion Sort:

ordenação por inserção

Quick Sort:

ordenação rápida

Heap Sort:

ordenação cabeça

(18)

Conhecido como

ordenação por seleção

Também é um algoritmo

simples

Algoritmo:

1. Selecione o menor elemento do vetor

2. Troque-o com o item da 1ª posição do vetor

3. Repita os dois primeiros passos com os n-1

elementos, n-2, n-3 até restar 1 elemento

(19)

Ilustração do método:

Antes 1ª iteração: O R D E N A

i = 0 – Houve Troca A R D E N O

(20)

Ilustração do método:

Antes 2ª iteração: A R D E N O

(21)

Ilustração do método:

Antes 3ª iteração: A D R E N O

i = 0 – Houve Troca A R D E N O i = 1 – Houve Troca A D R E N O i = 2 – Houve Troca A D E R N O

(22)

Ilustração do método:

Antes 4ª iteração: A D E R N O

(23)

Ilustração do método:

Antes 5ª iteração: A D E N R O

i = 0 – Houve Troca A R D E N O i = 1 – Houve Troca A D R E N O i = 2 – Houve Troca A D E R N O i = 3 – Houve Troca A D E N R O i = 4 – Houve Troca A D E N O R

(24)

 Implemente um programa, em python, que seja capaz

(25)

Bubble Sort:

ordenação por bolha

Selection Sort:

ordenação por seleção

Insertion Sort:

ordenação por inserção

Quick Sort:

ordenação rápida

Heap Sort:

ordenação cabeça

(26)

Conhecido como

ordenação por inserção

Algoritmo:

1. Em cada passo, a partir da 2ª posição do vetor, faça:

Selecione o i-ésimo item do vetor

(27)

Ilustração do método:

Chaves iniciais: O R D E N A

i = 1 O R D E N A

i = 2 D O R E N A

i = 3 D E O R N A

i = 4 D E N O R A

i = 5 A D E N O R

(28)

 Implemente um programa, em python, que seja capaz

(29)

Bubble Sort:

ordenação por bolha

Selection Sort:

ordenação por seleção

Insertion Sort:

ordenação por inserção

Quick Sort:

ordenação rápida

Heap Sort:

ordenação cabeça

(30)

Conhecido como

ordenação rápida

Publicado por Hoare em 1962;

O

mais

rápido

que

se

conhece

para

ordenação interna;

Provavelmente o

mais utilizado

;

(31)

Conhecido como

ordenação rápida

Algoritmo de Partição (parte 1):

1. Escolha arbitrariamente um pivô;

2. Percorra o vetor a partir da esquerda até que

L[i]>= pivô;

3. Percorra o vetor a partir da direita até que L[j]<= pivô;

4. Troque L[i] com L[j];

5. Continue até que os índices i e j se cruzem.

(32)

Conhecido como

ordenação rápida

Algoritmo recursivo (parte 2):

1. Sempre que os índices se cruzarem o processo deve ser reiniciado para cada um dos pedaços distintos: L[início] até L[j] e L[i] até L[fim];

2. Quando em um pedaço houver apenas um

(33)

33

2

8

6 10

4

7

3

Pivô = len(L) // 2

(34)

2

8

6 10

4

7

3

Pivô = 4

i

j

(35)

35

2

8

6 10

4

7

3

Pivô = 4

i

j

(36)

2

8

6 10

4

7

3

Pivô = 4

i

j

(37)

37

2

8

6 10

4

7

3

Pivô = 4

i

j

(38)

2

8

6 10

4

7

3

Pivô = 4

i

j

(39)

39

2

8

6 10

4

7

3

Pivô = 4

i

j

“i” e “j” Parados!

(40)

2

8

6 10

4

7

3

Pivô = 4

i

j

(41)

41

2

8

6 10

4

7

3

Pivô = 4

i

j

(42)

2

8

6 10

4

7

3

Pivô = 4

i

j

(43)

43

2

8

6 10

4

7

3

Pivô = 4

i

j

(44)

2

8

6 10

4

7

3

Pivô = 4

i

j

(45)

45

2

8

6 10

4

7

3

Pivô = 4

i

j

“i” e “j” Parados!

(46)

2

8

6 10

4

7

3

Pivô = 4

j

i

(47)

47

2

8

6 10

4

7

3

i

j

“i” e “j” se cruzaram. O vetor é particionado e o processo

(48)

2

8

6 10

4

7

3

i

j

L[i] >= Pivô?

(49)

49

2

8

6 10

4

7

3

i

j

Pivô = 8

(50)

2

8

6 10

4

7

3

i

j

Pivô = 8

(51)

51

2

8

6 10

4

7

3

i

j

Pivô = 8

“i” e “j” Parados!

(52)

2

8 6

10

4

7

3

i

j

Pivô = 8

(53)

53

2

8 6

10

4

7

3

i

j

Pivô = 8

(54)

2

8 6

10

4

7

3

i j

Pivô = 8

(55)

55

2

8 6

10

4

7

3

i j

Pivô = 8

(56)

2

8 6

10

4

7

3

i j

Pivô = 8

(57)

57 2 8 6 10 4 7 3

i

j

Pivô = 8

(58)

2

8 6

10

4

7

3

(59)

 Implemente um programa, em python, que seja capaz

(60)
(61)

61

 SZWARCFITER, Jayme; MARKENZON, Lilian.

Estruturas de Dados e seus Algoritmos, 3ª Edição.

 ZIVIANI, Nivio. Projeto de Algoritmos, 2ª Edição .

Imagem

Ilustração do método:
Ilustração do método:
Ilustração do método: Antes 3ª iteração: A D R E N O i = 0 – Houve Troca A R D E N O i = 1 – Houve Troca A D R E N O i = 2 – Houve Troca A D E R N O 21
Ilustração do método: Antes 4ª iteração: A D E R N O i = 0 – Houve Troca A R D E N O i = 1 – Houve Troca A D R E N O i = 2 – Houve Troca A D E R N O i = 3 – Houve Troca A D E N R O
+3

Referências

Documentos relacionados

O Ebitda não é uma medida utilizada nas práticas contábeis adotadas no Brasil, não representando o fluxo de caixa para os períodos apresentados e não deve ser

Nas duas páginas seguintes, por fileira: tres fotos do ensaio da Citizen K do inverno 2009; foto do motoqueiro da revista Flair de abril 2008 - uma das primeiras borradas que eu vi

Este resultado demonstra que para as empresas do Nível II, o retorno anormal acumulado se torna, na maior parte do tempo, estatisticamente significativo, o que confirmaria

Este trabalho é resultado de uma pesquisa quantitativa sobre a audiência realizada em 1999 envolvendo professores e alunos do Núcleo de Pesquisa de Comunicação da Universidade

3º) É necessário considerar, na formação do professor, o ensino da área do conhecimento.. específico, neste caso, a História, em todos os níveis de ensino. No que tange

A altura de planta da variedade UFV M100 e do híbrido simples DKB 390 foi maior do que a observada para o híbrido triplo DKB 455, mas não interferiu no acúmulo de matéria seca

¢ll', ™pe• oÙ m£qon œrga qalassopÒrwn ¡li»wn ka• buq…hj oÙk o‧da dolorrafšoj dÒlon ¥grhj, Leukoqšhj œce dîma baqÚrroon, e„sÒke pÒntou ka• s ka•

Como eles não são caracteres que possam ser impressos normalmente com a função print(), então utilizamos alguns comandos simples para utilizá-los em modo texto 2.. Outros