Você está na página 1de 125

Algoritmos e estrutura de dados

Aula 4: Algoritmos de busca e ordenação I


Universidade Federal do Triângulo Mineiro

Professor Me. Rooney R. A. Coelho


6 de Setembro de 2017
Roteiro da Apresentação

1 Noções de Complexidade de algoritmos


Análise de complexidade
Classes de problemas

2 Ordenação
Introdução
Algoritmo bubble sort
Algoritmo selection sort
Algoritmo insertion sort

3 Algoritmos de busca
Busca sequencial ou linear
Próximo Tópico

1 Noções de Complexidade de algoritmos


Análise de complexidade
Classes de problemas

2 Ordenação
Introdução
Algoritmo bubble sort
Algoritmo selection sort
Algoritmo insertion sort

3 Algoritmos de busca
Busca sequencial ou linear

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 3 / 51


Análise de complexidade

Motivação
Em programação, podemos resolver um problema de várias maneiras.
Algoritmos diferentes, não necessariamente resolvem o problema com a
mesma eficiência. Para comparar a eficiência de algoritmos foi criada
uma métrica chamada complexidade computacional.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 4 / 51


Análise de complexidade

Motivação
Em programação, podemos resolver um problema de várias maneiras.
Algoritmos diferentes, não necessariamente resolvem o problema com a
mesma eficiência. Para comparar a eficiência de algoritmos foi criada
uma métrica chamada complexidade computacional.

A diferença entre algoritmos pode ser:

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 4 / 51


Análise de complexidade

Motivação
Em programação, podemos resolver um problema de várias maneiras.
Algoritmos diferentes, não necessariamente resolvem o problema com a
mesma eficiência. Para comparar a eficiência de algoritmos foi criada
uma métrica chamada complexidade computacional.

A diferença entre algoritmos pode ser:


• Irrelevantes para um pequeno número de elementos processados.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 4 / 51


Análise de complexidade

Motivação
Em programação, podemos resolver um problema de várias maneiras.
Algoritmos diferentes, não necessariamente resolvem o problema com a
mesma eficiência. Para comparar a eficiência de algoritmos foi criada
uma métrica chamada complexidade computacional.

A diferença entre algoritmos pode ser:


• Irrelevantes para um pequeno número de elementos processados.
• Crescer proporcionalmente com o número de elementos
processados.

custo = memória + tempo

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 4 / 51


Como medir a eficiência?

Análise empírica
Comparação entre programas, analisado pela execução do programa.

As vantagens dessa análise são:

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 5 / 51


Como medir a eficiência?

Análise empírica
Comparação entre programas, analisado pela execução do programa.

As vantagens dessa análise são:


• Avaliar o desempenho em determinada configuração de
computador ou linguagem.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 5 / 51


Como medir a eficiência?

Análise empírica
Comparação entre programas, analisado pela execução do programa.

As vantagens dessa análise são:


• Avaliar o desempenho em determinada configuração de
computador ou linguagem.
• Considerar custos não aparentes como alocação de memória.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 5 / 51


Como medir a eficiência?

Análise empírica
Comparação entre programas, analisado pela execução do programa.

As vantagens dessa análise são:


• Avaliar o desempenho em determinada configuração de
computador ou linguagem.
• Considerar custos não aparentes como alocação de memória.
• Comparar computadores.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 5 / 51


Como medir a eficiência?

Análise empírica
Comparação entre programas, analisado pela execução do programa.

As vantagens dessa análise são:


• Avaliar o desempenho em determinada configuração de
computador ou linguagem.
• Considerar custos não aparentes como alocação de memória.
• Comparar computadores.
• Comparar linguagens.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 5 / 51


Como medir a eficiência?

Análise empírica
Comparação entre programas, analisado pela execução do programa.

As desvantagens dessa análise são:

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 6 / 51


Como medir a eficiência?

Análise empírica
Comparação entre programas, analisado pela execução do programa.

As desvantagens dessa análise são:


• Necessidade de implementar o algoritmo.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 6 / 51


Como medir a eficiência?

Análise empírica
Comparação entre programas, analisado pela execução do programa.

As desvantagens dessa análise são:


• Necessidade de implementar o algoritmo.
• Resultados mascarados pelo hardware ou software (eventos
ocorridos no momento de avaliação).

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 6 / 51


Como medir a eficiência?

Análise empírica
Comparação entre programas, analisado pela execução do programa.

As desvantagens dessa análise são:


• Necessidade de implementar o algoritmo.
• Resultados mascarados pelo hardware ou software (eventos
ocorridos no momento de avaliação).
• Natureza dos dados: reais, aleatórios, perversos.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 6 / 51


Como medir a eficiência?

Análise matemática
Cálculo do tempo gasto independente da linguagem ou hardware, mas
sim uma análise matemática formal em um computador idealizado e
simplificações.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 7 / 51


Como medir a eficiência?

Análise matemática
Cálculo do tempo gasto independente da linguagem ou hardware, mas
sim uma análise matemática formal em um computador idealizado e
simplificações.

Avalia-se a ideia por trás de um algoritmo, permite entender como


um algoritmo se comporta à medida que o conjunto de dados de
entrada cresce.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 7 / 51


Como medir a eficiência?

Análise matemática
Cálculo do tempo gasto independente da linguagem ou hardware, mas
sim uma análise matemática formal em um computador idealizado e
simplificações.

Avalia-se a ideia por trás de um algoritmo, permite entender como


um algoritmo se comporta à medida que o conjunto de dados de
entrada cresce.

Pode-se assim expressar a relação entre o tamanho do conjunto de


dados de entrada e a quantidade de tempo necessária para
processar esses dados.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 7 / 51


Análise assintótica
Grande-O O(n)
Analisa o pior caso de um algoritmo. O comportamento do algoritmo
nunca ultrapassa esse limite. Analisa o limite superior de um algoritmo.
Essa é a notação mais utilizada!

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 8 / 51


Análise assintótica
Grande-O O(n)
Analisa o pior caso de um algoritmo. O comportamento do algoritmo
nunca ultrapassa esse limite. Analisa o limite superior de um algoritmo.
Essa é a notação mais utilizada!

Grande-ômega Ω(n)
Analisa o melhor caso de um algoritmo.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 8 / 51


Análise assintótica
Grande-O O(n)
Analisa o pior caso de um algoritmo. O comportamento do algoritmo
nunca ultrapassa esse limite. Analisa o limite superior de um algoritmo.
Essa é a notação mais utilizada!

Grande-ômega Ω(n)
Analisa o melhor caso de um algoritmo.

Grande-theta Θ(n)
Limite assintótico firme. Significa que existe números positivos c e d
tais que c · g(n) ≤ f (n) ≤ d · g(n) para todo n suficientemente grande.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 8 / 51


Análise assintótica
Grande-O O(n)
Analisa o pior caso de um algoritmo. O comportamento do algoritmo
nunca ultrapassa esse limite. Analisa o limite superior de um algoritmo.
Essa é a notação mais utilizada!

Grande-ômega Ω(n)
Analisa o melhor caso de um algoritmo.

Grande-theta Θ(n)
Limite assintótico firme. Significa que existe números positivos c e d
tais que c · g(n) ≤ f (n) ≤ d · g(n) para todo n suficientemente grande.

Enquanto as notações O e Ω possuem uma relação de menor ou igual


e maior ou igual, as notações o e ω possuem uma relação de menor e
maior.
Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 8 / 51
Próximo Tópico

1 Noções de Complexidade de algoritmos


Análise de complexidade
Classes de problemas

2 Ordenação
Introdução
Algoritmo bubble sort
Algoritmo selection sort
Algoritmo insertion sort

3 Algoritmos de busca
Busca sequencial ou linear

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 9 / 51


Classes de problemas
• O(1): ordem constante. As instruções são executas um número
fixo de vezes. Não depende do tamanho de entrada.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 10 / 51


Classes de problemas
• O(1): ordem constante. As instruções são executas um número
fixo de vezes. Não depende do tamanho de entrada.
• O(log N): ordem logarítmica. Típica de algoritmos que resolvem
um problema transformando-o em problemas menores.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 10 / 51


Classes de problemas
• O(1): ordem constante. As instruções são executas um número
fixo de vezes. Não depende do tamanho de entrada.
• O(log N): ordem logarítmica. Típica de algoritmos que resolvem
um problema transformando-o em problemas menores.
• O(N): ordem linear. Certa quantidade de operações é executada
sobre cada um dos elementos de entrada.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 10 / 51


Classes de problemas
• O(1): ordem constante. As instruções são executas um número
fixo de vezes. Não depende do tamanho de entrada.
• O(log N): ordem logarítmica. Típica de algoritmos que resolvem
um problema transformando-o em problemas menores.
• O(N): ordem linear. Certa quantidade de operações é executada
sobre cada um dos elementos de entrada.
• O(N 2 ): ordem quadrática. Dados processados aos pares,
aninhamento de comandos de repetição.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 10 / 51


Classes de problemas
• O(1): ordem constante. As instruções são executas um número
fixo de vezes. Não depende do tamanho de entrada.
• O(log N): ordem logarítmica. Típica de algoritmos que resolvem
um problema transformando-o em problemas menores.
• O(N): ordem linear. Certa quantidade de operações é executada
sobre cada um dos elementos de entrada.
• O(N 2 ): ordem quadrática. Dados processados aos pares,
aninhamento de comandos de repetição.
• O(N 3 ): ordem cúbica. Aninhamento de três comandos de
repetição.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 10 / 51


Classes de problemas
• O(1): ordem constante. As instruções são executas um número
fixo de vezes. Não depende do tamanho de entrada.
• O(log N): ordem logarítmica. Típica de algoritmos que resolvem
um problema transformando-o em problemas menores.
• O(N): ordem linear. Certa quantidade de operações é executada
sobre cada um dos elementos de entrada.
• O(N 2 ): ordem quadrática. Dados processados aos pares,
aninhamento de comandos de repetição.
• O(N 3 ): ordem cúbica. Aninhamento de três comandos de
repetição.
• O(2N ): ordem exponencial. Solução de força bruta. Não são
uteis do ponto de vista prático.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 10 / 51


Classes de problemas
• O(1): ordem constante. As instruções são executas um número
fixo de vezes. Não depende do tamanho de entrada.
• O(log N): ordem logarítmica. Típica de algoritmos que resolvem
um problema transformando-o em problemas menores.
• O(N): ordem linear. Certa quantidade de operações é executada
sobre cada um dos elementos de entrada.
• O(N 2 ): ordem quadrática. Dados processados aos pares,
aninhamento de comandos de repetição.
• O(N 3 ): ordem cúbica. Aninhamento de três comandos de
repetição.
• O(2N ): ordem exponencial. Solução de força bruta. Não são
uteis do ponto de vista prático.
• O(N!): ordem fatorial. Solução de força bruta. Não são uteis do
ponto de vista prático. Possui um comportamento pior que o
exponencial.
Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 10 / 51
Complexidade Big-O
O(2n) O(n2)

O(n!)
Operações

O(n log n)

O(n)

O(log n) O(1)

Elementos

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 11 / 51


Próximo Tópico

1 Noções de Complexidade de algoritmos


Análise de complexidade
Classes de problemas

2 Ordenação
Introdução
Algoritmo bubble sort
Algoritmo selection sort
Algoritmo insertion sort

3 Algoritmos de busca
Busca sequencial ou linear

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 12 / 51


Ordenação

Definição
Ordenar é o processo de rearranjar objetos, coisas, dados, etc. de
acordo com algumas características, em determinada ordem, para
posterior recuperação de forma rápida e eficiente.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 13 / 51


Ordenação

Definição
Ordenar é o processo de rearranjar objetos, coisas, dados, etc. de
acordo com algumas características, em determinada ordem, para
posterior recuperação de forma rápida e eficiente.

Chave de ordenação
É o campo do item utilizado para comparação. É por meio dele que
sabemos se determinado elemento está à frente ou não de outros no
conjunto ordenado.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 13 / 51


Ordenação
Exemplo
Imagine como seria procurar uma palavra no dicionário caso esse não
estivesse em ordem alfabética!

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 14 / 51


Ordenação
Exemplo
Imagine como seria procurar uma palavra no dicionário caso esse não
estivesse em ordem alfabética!

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 14 / 51


Ordenação
Exemplo
Computadores dos anos 60. se o cartão perfurado era o único meio
de armazenamento de dados utilizado pelos computadores nessa
época, então como ocorria a ordenação dos dados nele registrados?

Figura : Cartão perfurado de 80 colunas contendo dados de um cliente.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 15 / 51


Ordenação

Figura : Classificador de cartão perfurado de 80 colunas - IBM® 0083.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 16 / 51


Ordenação

Classificação interna
O processo de classificação de dados contidos inteiramente na
memória principal é denominado classificação interna.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 17 / 51


Ordenação

Classificação interna
O processo de classificação de dados contidos inteiramente na
memória principal é denominado classificação interna.

Classificação externa
O processo de classificação de dados que não cabe inteiramente na
memória principal e que, portanto, os dados estão contidos em
memória secundária é denominado classificação externa.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 17 / 51


Ordenação

Classificação interna
O processo de classificação de dados contidos inteiramente na
memória principal é denominado classificação interna.

Classificação externa
O processo de classificação de dados que não cabe inteiramente na
memória principal e que, portanto, os dados estão contidos em
memória secundária é denominado classificação externa.

Algoritmo estável
A ordem dos elementos com chaves iguais não muda durante a
ordenação.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 17 / 51


Próximo Tópico

1 Noções de Complexidade de algoritmos


Análise de complexidade
Classes de problemas

2 Ordenação
Introdução
Algoritmo bubble sort
Algoritmo selection sort
Algoritmo insertion sort

3 Algoritmos de busca
Busca sequencial ou linear

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 18 / 51


Bubble sort

O que é?
É um método de classificação caracterizado por efetuar ordenação
comparando sucessivamente pares de elementos e mudando-os de
posição quando se apresentam fora da ordem desejada.

O bubble sort é um dos métodos de classificação mais simples. É


conhecido como “método da bolha” porque usa a estratégia de
“borbulhar” o maior elemento (o elemento de maior valor) para o final
do arranjo (ou estrutura) de dados que está sendo ordenado.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 19 / 51


Bubble sort
O algoritmo bubble sort trabalha de forma a movimentar, uma posição
por vez, o maior valor existente na porção não ordenada de um array
para a sua respectiva posição no array ordenado. Isso é repetido até
que todos os elementos estejam em suas posições correspondentes.
Funcionamento

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 20 / 51


Bubble sort
O algoritmo bubble sort trabalha de forma a movimentar, uma posição
por vez, o maior valor existente na porção não ordenada de um array
para a sua respectiva posição no array ordenado. Isso é repetido até
que todos os elementos estejam em suas posições correspondentes.
Funcionamento
• Faz-se uma varredura em um vetor.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 20 / 51


Bubble sort
O algoritmo bubble sort trabalha de forma a movimentar, uma posição
por vez, o maior valor existente na porção não ordenada de um array
para a sua respectiva posição no array ordenado. Isso é repetido até
que todos os elementos estejam em suas posições correspondentes.
Funcionamento
• Faz-se uma varredura em um vetor.
• Troca de elementos em posições consecutivas.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 20 / 51


Bubble sort
O algoritmo bubble sort trabalha de forma a movimentar, uma posição
por vez, o maior valor existente na porção não ordenada de um array
para a sua respectiva posição no array ordenado. Isso é repetido até
que todos os elementos estejam em suas posições correspondentes.
Funcionamento
• Faz-se uma varredura em um vetor.
• Troca de elementos em posições consecutivas.
• Se elementos consecutivos estão fora de ordem, inverte-se suas
posições.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 20 / 51


Bubble sort
O algoritmo bubble sort trabalha de forma a movimentar, uma posição
por vez, o maior valor existente na porção não ordenada de um array
para a sua respectiva posição no array ordenado. Isso é repetido até
que todos os elementos estejam em suas posições correspondentes.
Funcionamento
• Faz-se uma varredura em um vetor.
• Troca de elementos em posições consecutivas.
• Se elementos consecutivos estão fora de ordem, inverte-se suas
posições.
• Se não, mantém-se as posições.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 20 / 51


Bubble sort
O algoritmo bubble sort trabalha de forma a movimentar, uma posição
por vez, o maior valor existente na porção não ordenada de um array
para a sua respectiva posição no array ordenado. Isso é repetido até
que todos os elementos estejam em suas posições correspondentes.
Funcionamento
• Faz-se uma varredura em um vetor.
• Troca de elementos em posições consecutivas.
• Se elementos consecutivos estão fora de ordem, inverte-se suas
posições.
• Se não, mantém-se as posições.
• No final da varredura o último elemento está na ordem correta.
Reserva-o como parte do vetor ordenado. O vetor não ordenado
agora tem um elemento a menos.
• repete-se o processo até que todos estejam ordenados.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 20 / 51


bubble sort

x 23 4 67 -8 21 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 21 / 51


bubble sort

x 23 4 67 -8 21 x

1ª iteração do do-while x
i=0 23 4 67 -8 21 V[i] > V[i+1]: Trocar

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 21 / 51


bubble sort

x 23 4 67 -8 21 x

1ª iteração do do-while x
i=0 23 4 67 -8 21 V[i] > V[i+1]: Trocar

i=1 4 23 67 -8 21 V[i] < V[i+1]: Manter

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 21 / 51


bubble sort

x 23 4 67 -8 21 x

1ª iteração do do-while x
i=0 23 4 67 -8 21 V[i] > V[i+1]: Trocar

i=1 4 23 67 -8 21 V[i] < V[i+1]: Manter

i=2 4 23 67 -8 21 V[i] > V[i+1]: Trocar

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 21 / 51


bubble sort

x 23 4 67 -8 21 x

1ª iteração do do-while x
i=0 23 4 67 -8 21 V[i] > V[i+1]: Trocar

i=1 4 23 67 -8 21 V[i] < V[i+1]: Manter

i=2 4 23 67 -8 21 V[i] > V[i+1]: Trocar

i=3 4 23 -8 67 21 V[i] > V[i+1]: Trocar

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 21 / 51


bubble sort

x 23 4 67 -8 21 x

1ª iteração do do-while x
i=0 23 4 67 -8 21 V[i] > V[i+1]: Trocar

i=1 4 23 67 -8 21 V[i] < V[i+1]: Manter

i=2 4 23 67 -8 21 V[i] > V[i+1]: Trocar

i=3 4 23 -8 67 21 V[i] > V[i+1]: Trocar

Final 4 23 -8 21 67 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 21 / 51


bubble sort

2ª iteração do do-while x
i=0 4 23 -8 21 67 V[i] < V[i+1]: Manter

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 22 / 51


bubble sort

2ª iteração do do-while x
i=0 4 23 -8 21 67 V[i] < V[i+1]: Manter

i=1 4 23 -8 21 67 V[i] > V[i+1]: Trocar

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 22 / 51


bubble sort

2ª iteração do do-while x
i=0 4 23 -8 21 67 V[i] < V[i+1]: Manter

i=1 4 23 -8 21 67 V[i] > V[i+1]: Trocar

i=2 4 -8 23 21 67 V[i] > V[i+1]: Trocar

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 22 / 51


bubble sort

2ª iteração do do-while x
i=0 4 23 -8 21 67 V[i] < V[i+1]: Manter

i=1 4 23 -8 21 67 V[i] > V[i+1]: Trocar

i=2 4 -8 23 21 67 V[i] > V[i+1]: Trocar

Final 4 -8 21 23 67 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 22 / 51


bubble sort

3ª iteração do do-while
i=0 4 -8 21 23 67 V[i] > V[i+1]: Trocar

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 23 / 51


bubble sort

3ª iteração do do-while
i=0 4 -8 21 23 67 V[i] > V[i+1]: Trocar

i=1 -8 4 21 23 67 V[i] < V[i+1]: Manter

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 23 / 51


bubble sort

3ª iteração do do-while
i=0 4 -8 21 23 67 V[i] > V[i+1]: Trocar

i=1 -8 4 21 23 67 V[i] < V[i+1]: Manter

Final -8 4 21 23 67 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 23 / 51


bubble sort

4ª iteração do do-while
i=0 -8 4 21 23 67 V[i] < V[i+1]: Manter

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 24 / 51


bubble sort

4ª iteração do do-while
i=0 -8 4 21 23 67 V[i] < V[i+1]: Manter

Ordenado -8 4 21 23 67 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 24 / 51


bubble sort

O bubble sort é um algoritmo simples e de fácil entendimento e


implementação. Além disso, está entre os mais difundidos métodos
de ordenação existentes.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 25 / 51


bubble sort

O bubble sort é um algoritmo simples e de fácil entendimento e


implementação. Além disso, está entre os mais difundidos métodos
de ordenação existentes.

Eficiência
Infelizmente, não é um algoritmo eficiente, sendo estudado apenas
para fins de desenvolvimento de raciocínio.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 25 / 51


bubble sort

O bubble sort é um algoritmo simples e de fácil entendimento e


implementação. Além disso, está entre os mais difundidos métodos
de ordenação existentes.

Eficiência
Infelizmente, não é um algoritmo eficiente, sendo estudado apenas
para fins de desenvolvimento de raciocínio.

Complexidade
O(n): melhor caso, elementos já ordenados.
O(n2 ): pior caso, elementos na ordem inversa.
O(n2 ): caso médio.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 25 / 51


void bubbleSort(int *V, int N){
int i, continua, aux, fim=N;
do{
continua=0;
for( i = 0; i < fim-1; i++ ){
// anterior > próximo? Mudar!
if( V[i] > V[i+1] ){
aux = V[i];
V[i] = V[i+1];
V[i+1] = aux;
continua = i;
}
}
fim--;
} while(continua != 0);
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 26 / 51


Próximo Tópico

1 Noções de Complexidade de algoritmos


Análise de complexidade
Classes de problemas

2 Ordenação
Introdução
Algoritmo bubble sort
Algoritmo selection sort
Algoritmo insertion sort

3 Algoritmos de busca
Busca sequencial ou linear

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 27 / 51


Selection sort

O que é?
É um algoritmo de ordenação onde para cada elemento do vetor é feita
uma varredura das demais posições e seleciona-se o melhor
elemento para ocupar aquela posição do array. Na prática possui um
desempenho quase sempre superior ao bubble sort.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 28 / 51


Selection sort

Funcionamento
• Divide-se o array em duas partes. Ordenada à esquerda e não
ordenada à direita.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 29 / 51


Selection sort

Funcionamento
• Divide-se o array em duas partes. Ordenada à esquerda e não
ordenada à direita.
• Para cada elemento do array, começando do primeiro, o algoritmo
procura na parte não ordenada o menor valor e troca os dois
valores de lugar.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 29 / 51


Selection sort

Funcionamento
• Divide-se o array em duas partes. Ordenada à esquerda e não
ordenada à direita.
• Para cada elemento do array, começando do primeiro, o algoritmo
procura na parte não ordenada o menor valor e troca os dois
valores de lugar.
• Em seguida o algoritmo avança para a próxima posição do array e
esse processo é feito até que todo o array esteja ordenado.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 29 / 51


Selection sort

Inicial 23 4 67 -8 21 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 30 / 51


Selection sort

Inicial 23 4 67 -8 21 x

i=0 23 4 67 -8 21 V[3] < V[0]: Trocar

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 30 / 51


Selection sort

Inicial 23 4 67 -8 21 x

i=0 23 4 67 -8 21 V[3] < V[0]: Trocar

x -8 4 67 23 21 Após a operação de troca

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 30 / 51


Selection sort

Inicial 23 4 67 -8 21 x

i=0 23 4 67 -8 21 V[3] < V[0]: Trocar

x -8 4 67 23 21 Após a operação de troca

i=1 -8 4 67 23 21 Nenhuma posição a frente


é menor V[1]: Manter
x x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 30 / 51


Selection sort

Inicial 23 4 67 -8 21 x

i=0 23 4 67 -8 21 V[3] < V[0]: Trocar

x -8 4 67 23 21 Após a operação de troca

i=1 -8 4 67 23 21 Nenhuma posição a frente


é menor V[1]: Manter
x x

x -8 4 67 23 21 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 30 / 51


Selection sort

Inicial 23 4 67 -8 21 x

i=0 23 4 67 -8 21 V[3] < V[0]: Trocar

x -8 4 67 23 21 Após a operação de troca

i=1 -8 4 67 23 21 Nenhuma posição a frente


é menor V[1]: Manter
x x

x -8 4 67 23 21 x

i=2 -8 4 67 23 21 V[4] < V[2]: Trocar

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 30 / 51


Selection sort

Inicial 23 4 67 -8 21 x

i=0 23 4 67 -8 21 V[3] < V[0]: Trocar

x -8 4 67 23 21 Após a operação de troca

i=1 -8 4 67 23 21 Nenhuma posição a frente


é menor V[1]: Manter
x x

x -8 4 67 23 21 x

i=2 -8 4 67 23 21 V[4] < V[2]: Trocar

x -8 4 21 23 67 Após a operação de troca

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 30 / 51


Selection sort

i=3 -8 4 21 23 67 Nenhuma posição a frente


é menor V[3]: Manter

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 31 / 51


Selection sort

i=3 -8 4 21 23 67 Nenhuma posição a frente


é menor V[3]: Manter

x -8 4 21 23 67 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 31 / 51


Selection sort

i=3 -8 4 21 23 67 Nenhuma posição a frente


é menor V[3]: Manter

x -8 4 21 23 67 x

Ordenado -8 4 21 23 67 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 31 / 51


Selection sort

Eficiência
Não é um algoritmo eficiente, já que sua eficiência diminui
drasticamente à medida que o número de elementos do array aumenta.
Não é recomendado para aplicações que envolvam grandes
quantidades de dados ou velocidade.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 32 / 51


Selection sort

Eficiência
Não é um algoritmo eficiente, já que sua eficiência diminui
drasticamente à medida que o número de elementos do array aumenta.
Não é recomendado para aplicações que envolvam grandes
quantidades de dados ou velocidade.

Complexidade
O(n2 ): Independe da ordem inicial dos elementos.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 32 / 51


Selection sort

Eficiência
Não é um algoritmo eficiente, já que sua eficiência diminui
drasticamente à medida que o número de elementos do array aumenta.
Não é recomendado para aplicações que envolvam grandes
quantidades de dados ou velocidade.

Complexidade
O(n2 ): Independe da ordem inicial dos elementos.

Quase sempre supera o bubble sort em desempenho, pois envolve


um menor número de comparações.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 32 / 51


Selection sort

void selectionSort(int *V, int N){


int i, j, menor, troca;
for( i=0; i< N-1; i++ ){
menor = i;
for( j = i+1; j<N; j++ ){
if( V[j] < V[menor] )
menor = j;
}
if( i != menor ){
troca = V[i];
V[i] = V[menor];
V[menor] = troca;
}
}
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 33 / 51


Próximo Tópico

1 Noções de Complexidade de algoritmos


Análise de complexidade
Classes de problemas

2 Ordenação
Introdução
Algoritmo bubble sort
Algoritmo selection sort
Algoritmo insertion sort

3 Algoritmos de busca
Busca sequencial ou linear

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 34 / 51


Insertion sort

♣♣ ♣
7


♣♣
5♣ ♣
♣♣ ♣
10
4 ♣♣
2 ♣
♣ ♣♣ ♣



♣ ♣
7
♣ ♣♣ ♣


5♣4 2♣
♣♣♣
♣♣
0

1

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 35 / 51


Insertion sort

O que é?
Assemelha-se ao processo de ordenação de um conjunto de cartas de
baralho. Pega-se uma carta de cada vez e a insere em seu devido lugar,
deixando as cartas da mão em ordem.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 36 / 51


Insertion sort

O que é?
Assemelha-se ao processo de ordenação de um conjunto de cartas de
baralho. Pega-se uma carta de cada vez e a insere em seu devido lugar,
deixando as cartas da mão em ordem.

Na prática possui um desempenho superior ao bubble sort e ao


selection sort.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 36 / 51


Insertion sort

Funcionamento
• Percorre-se um array e, para cada posição X, verifica se o seu valor
está na posição correta.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 37 / 51


Insertion sort

Funcionamento
• Percorre-se um array e, para cada posição X, verifica se o seu valor
está na posição correta.
• Anda-se para o começo do array a partir da posição X.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 37 / 51


Insertion sort

Funcionamento
• Percorre-se um array e, para cada posição X, verifica se o seu valor
está na posição correta.
• Anda-se para o começo do array a partir da posição X.
• Movimenta-se uma posição para frente os valores que são maiores
do que o valor da sua posição X.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 37 / 51


Insertion sort

Funcionamento
• Percorre-se um array e, para cada posição X, verifica se o seu valor
está na posição correta.
• Anda-se para o começo do array a partir da posição X.
• Movimenta-se uma posição para frente os valores que são maiores
do que o valor da sua posição X.
• Tem-se então uma posição livre para inserir o valor da posição X
em seu devido lugar.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 37 / 51


Insertion sort
Inicial 23 4 67 -8 21 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 38 / 51


Insertion sort
Inicial 23 4 67 -8 21 x

i=1 23 4 67 -8 21 Desloca-se os valores à esquerda


que são maiores que V[i]
x 4 23 67 -8 21 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 38 / 51


Insertion sort
Inicial 23 4 67 -8 21 x

i=1 23 4 67 -8 21 Desloca-se os valores à esquerda


que são maiores que V[i]
x 4 23 67 -8 21 x

i=2 4 23 67 -8 21 Nenhum valor à esquerda


é maior que V[i]: Manter
x 4 23 67 -8 21 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 38 / 51


Insertion sort
Inicial 23 4 67 -8 21 x

i=1 23 4 67 -8 21 Desloca-se os valores à esquerda


que são maiores que V[i]
x 4 23 67 -8 21 x

i=2 4 23 67 -8 21 Nenhum valor à esquerda


é maior que V[i]: Manter
x 4 23 67 -8 21 x

i=3 4 23 67 -8 21 Desloca-se os valores à esquerda


que são maiores que V[i]
x -8 4 23 67 21 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 38 / 51


Insertion sort
Inicial 23 4 67 -8 21 x

i=1 23 4 67 -8 21 Desloca-se os valores à esquerda


que são maiores que V[i]
x 4 23 67 -8 21 x

i=2 4 23 67 -8 21 Nenhum valor à esquerda


é maior que V[i]: Manter
x 4 23 67 -8 21 x

i=3 4 23 67 -8 21 Desloca-se os valores à esquerda


que são maiores que V[i]
x -8 4 23 67 21 x

i=4 -8 4 23 67 21 Desloca-se os valores à esquerda


que são maiores que V[i]
x -8 4 21 23 67 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 38 / 51


Insertion sort
Inicial 23 4 67 -8 21 x

i=1 23 4 67 -8 21 Desloca-se os valores à esquerda


que são maiores que V[i]
x 4 23 67 -8 21 x

i=2 4 23 67 -8 21 Nenhum valor à esquerda


é maior que V[i]: Manter
x 4 23 67 -8 21 x

i=3 4 23 67 -8 21 Desloca-se os valores à esquerda


que são maiores que V[i]
x -8 4 23 67 21 x

i=4 -8 4 23 67 21 Desloca-se os valores à esquerda


que são maiores que V[i]
x -8 4 21 23 67 x

Ordenado -8 4 21 23 67 x

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 38 / 51


Insertion sort
1 2 3 4 5 6
5 2 4 6 1 3

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 39 / 51


Insertion sort
1 2 3 4 5 6
5 2 4 6 1 3

1 2 3 4 5 6
2 5 4 6 1 3

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 39 / 51


Insertion sort
1 2 3 4 5 6
5 2 4 6 1 3

1 2 3 4 5 6
2 5 4 6 1 3

1 2 3 4 5 6
2 4 5 6 1 3

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 39 / 51


Insertion sort
1 2 3 4 5 6
5 2 4 6 1 3

1 2 3 4 5 6
2 5 4 6 1 3

1 2 3 4 5 6
2 4 5 6 1 3

1 2 3 4 5 6
2 4 5 6 1 3

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 39 / 51


Insertion sort
1 2 3 4 5 6
5 2 4 6 1 3

1 2 3 4 5 6
2 5 4 6 1 3

1 2 3 4 5 6
2 4 5 6 1 3

1 2 3 4 5 6
2 4 5 6 1 3

1 2 3 4 5 6
1 2 4 5 6 3

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 39 / 51


Insertion sort
1 2 3 4 5 6
5 2 4 6 1 3

1 2 3 4 5 6
2 5 4 6 1 3

1 2 3 4 5 6
2 4 5 6 1 3

1 2 3 4 5 6
2 4 5 6 1 3

1 2 3 4 5 6
1 2 4 5 6 3

1 2 3 4 5 6
1 2 3 4 5 6

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 39 / 51


Insertion sort
Eficiência
Na prática o insertion sort é mais eficiente que a maioria dos
algortitmos de ordem quadrática, como o selection sort e o bubble sort.
Para conjuntos de pequenos dados ele é um dos algoritmos mais
rápidos, superando inclusive o quick sort.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 40 / 51


Insertion sort
Eficiência
Na prática o insertion sort é mais eficiente que a maioria dos
algortitmos de ordem quadrática, como o selection sort e o bubble sort.
Para conjuntos de pequenos dados ele é um dos algoritmos mais
rápidos, superando inclusive o quick sort.

Complexidade
• O(n): Melhor caso, elementos já ordenados.
• O(n2 ): Pior caso, elementos na ordem inversa.
• O(n2 ): Caso médio.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 40 / 51


Insertion sort
Eficiência
Na prática o insertion sort é mais eficiente que a maioria dos
algortitmos de ordem quadrática, como o selection sort e o bubble sort.
Para conjuntos de pequenos dados ele é um dos algoritmos mais
rápidos, superando inclusive o quick sort.

Complexidade
• O(n): Melhor caso, elementos já ordenados.
• O(n2 ): Pior caso, elementos na ordem inversa.
• O(n2 ): Caso médio.

Vantagens
Estável: a ordem dos elementos iguais não muda durante a ordenação.
On-line: pode-se ordenar os elementos à medida que os recebe.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 40 / 51


Insertion sort

void insertionSort(int *V, int N){


int i, j, atual;
for( i=1; i<N; i++ ){
atual = V[i];
// Desloca à frente todos os maiores que o atual
for( j=i; (j>0) && (atual < V[j-1]); j-- )
V[j] = V[j-1];
// Insere o atual na posição correta
V[j] = atual;
}
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 41 / 51


Próximo Tópico

1 Noções de Complexidade de algoritmos


Análise de complexidade
Classes de problemas

2 Ordenação
Introdução
Algoritmo bubble sort
Algoritmo selection sort
Algoritmo insertion sort

3 Algoritmos de busca
Busca sequencial ou linear

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 42 / 51


Busca em arrays

O que é?
Visa responder se determinado valor está ou não presente em um
conjunto de elementos.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 43 / 51


Busca em arrays

O que é?
Visa responder se determinado valor está ou não presente em um
conjunto de elementos.

Chave de busca
A chave de busca é o campo do item utilizado para comparação. É por
meio dessa chave que sabemos se dado elemento é o que buscamos.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 43 / 51


Busca linear

O que é?
A busca sequencial ou linear é a estratégia mais simples de busca que
existe. Percorre-se todas as posições do array até encontrar o
elemento. Caso não o encontre retorna-se um alerta informando a não
existência do elemento.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 44 / 51


Busca linear

23 4 67 -8 54 90 21

elem 54 elemento procurado

i=0 23 4 67 -8 54 90 21 Valor diferente: continua

i=1 23 4 67 -8 54 90 21 Valor diferente: continua

i=2 23 4 67 -8 54 90 21 Valor diferente: continua

i=3 23 4 67 -8 54 90 21 Valor diferente: continua

i=4 23 4 67 -8 54 90 21 Valor igual: termina

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 45 / 51


Busca linear

Atenção!
Procurar determinado elemento em um array desordenado é uma
tarefa bastante cara.

Complexidade
• O(1): melhor caso, o elemento é o primeiro do array.
• O(n): pior caso, o elemento é o último ou não existe.
• O(n/2): caso médio.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 46 / 51


Busca linear

int buscaLinear(int *V, int N, int elem){


int i;
for( i=0; i<N; i++ ){
if( elem == V[i] )
return i; // elemento encontrado
}
return -1; // elemento não encontrado
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 47 / 51


Busca linear ordenada

O que é?
A busca sequencial ordenada assume que os dados estão ordenados.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 48 / 51


Busca linear ordenada

O que é?
A busca sequencial ordenada assume que os dados estão ordenados.

Vantagem
Se o elemento procurado for menor do que o valor em determinada
posição do array, temos a certeza de que ele não estará no restante do
array. Isso evita a necessidade de percorrer o array do início até o seu
fim.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 48 / 51


Busca linear ordenada

O que é?
A busca sequencial ordenada assume que os dados estão ordenados.

Vantagem
Se o elemento procurado for menor do que o valor em determinada
posição do array, temos a certeza de que ele não estará no restante do
array. Isso evita a necessidade de percorrer o array do início até o seu
fim.

Desvantagem
Ordenar um array também tem o seu custo. Este custo é superior ao
custo da busca sequencial em seu pior caso.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 48 / 51


Busca linear ordenada

-8 4 21 23 54 67 90

elem 34 elemento procurado

i=0 -8 4 21 23 54 67 90 Valor diferente: continua

i=1 -8 4 21 23 54 67 90 Valor diferente: continua

i=2 -8 4 21 23 54 67 90 Valor diferente: continua

i=3 -8 4 21 23 54 67 90 Valor diferente: continua

i=4 -8 4 21 23 54 67 90 Valor maior: não existe!

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 49 / 51


Busca linear ordenada

int buscaOrdenada(int *V, int N, int elem){


int i;
for( i=0; i<N; i++ ){
if( elem == V[i] )
return i; // elemento encontrado
else
if ( elem < V[i] )
return -1; // parar a busca
}
return -1; // elemento não encontrado
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 50 / 51


Obrigado!

Professor Me. Rooney R. A. Coelho (UFTM) Aula 4 6 de Setembro de 2017 51 / 51

Você também pode gostar