Você está na página 1de 11

CCF130

Aula 03: Busca Seqencial e Busca Binria


Prof. Larcio Baldochi

Contedo

Mtodos de busca elementares


Busca Sequencial Busca Binria

Busca Seqencial
Busca mais simples Consiste em varrer linearmente o conjunto de dados at localizar (ou no) a chave desejada

int busca_seq(registro *A, int tam, int K) { int i = 0; while ((i < tam) && (A[i].chave != K)) i++; if (A[i].chave == K) return 1; else return 0; }

Busca Seqencial
int busca_seq(registro *A, int tam, int K) { int i = 0; while ((i < tam) && (A[i].chave != K)) i++; if (A[i].chave == K) return 1; else return 0; }

Duas comparaes dentro do lao Podemos otimizar fazendo busca com sentinela

Busca Seqencial com Sentinela

A chave procurada adicionada ao final do conjunto de dados


A chave procurada sempre ser alcanada Se posio == N, chave no se encontra no cojunto

int busca_sentinela(registro *A, int tam, int K) { int i = 0; A[tam].chave = K; while (A[i].chave != K) i++; if (i < tam) return 1; else return 0; }

Busca Seqencial em conjunto ordenado

Se dados esto ordenados, possvel otimizar o processo de busca seqencial

int busca_seq_ordenado(registro *A, int tam, int K) { int i = 0; A[tam].chave = K; while (A[i].chave < K) i++; if ((i < tam) && (A[i].chave == K)) return 1; else return 0; }

Busca em conjunto ordenado


Se o conjunto est ordenado, busca sequencial no apropriada Busca binria

Baseada no princpio de dividir para conquistar Usar varaveis que indiquem o incio e fim do conjunto
Faa meio=(incio+fim)/2 Se elemento procurado (X) == A[meio], achou Seno Se X < A[meio], faa fim = meio-1 Seno faa inicio = meio+1 Se no achou e inicio < fim, repita o processo

Busca Binria
Exemplo

Chave de Busca = 60 1a. Iterao incio meio fim

10

20

30

40

50

60

70

80

90

100

2a. Iterao incio meio fim

10

20

30

40

50

60

70

80

90

100

3a. Iterao

incio meio fim

10

20

30

40

50

60

70

80

90

100

Busca binria
Detalhamento 1 3 4 5 17 18 31 33

Se (inicio > fim) Retorne (-1) meio = (inicio + fim) / 2 Se (x = = v[meio]) Retorne (meio); Se (x < v[meio]) Busque por x em v de v[inicio] at v[meio 1]; seno Busque por x em v de v[meio + 1] at v[fim];

Busca binria
Implementao
Se (inicio > fim) Retorne (-1) meio = (alto + baixo) / 2 Se (x = = v[meio]) Retorne (meio); Se (x < v[meio]) Busque por x em v de v[inicio] at v[meio 1]; seno Busque por x em v de v[meio + 1] at v[fim];

Duas solues

Iterativa (lao while) Recursiva

Trabalho 2
Gerar colees de at 1.000.000 nmeros inteiros Ordenar essa coleo utilizando QuickSort Realizar a busca por 10 chaves geradas aleatoriamente

a) Utilizando busca sequencial ordenada b) Utilizando busca binria iterativa c) Utilizando busca binria recursiva

Apresente uma comparao entre o tempo gasto em cada opo

Você também pode gostar