Escolar Documentos
Profissional Documentos
Cultura Documentos
P
rof. Jéssica Oliveira
1
Busca Inserção
Linear
Seleção
Modos Métodos
Hash
ITERATIV Quicksort
RECURSSIVO
O
3
Observações
Operação de inicialização, fundamental antes
de qualquer outra operação;
Verificação se a lista está vazia ou cheia, não mudam
se a lista está ou não ordenada;
Pode–se fazer uma busca seqüencial em uma lista
já ordenada;
Normalmente a operação de busca mais apropriada
em uma lista ordenada é a busca Binária;
A inserção, remoção em uma lista ordenada é
diferente, já que a ordenação dos elementos deve
ser mantida após estas operações.
4
Criação da Lista
Supondo uma lista de números reais.
A criação da lista se constitui na operação de
declaração das variáveis que descrevem a lista.
float v[10]; // lista propriamente dita – capacidade de 10
elementos
int n; // quantidade de elementos existentes em v
0 1 2 3 ... 6 7 8
9 ...
5
Inicialização da Lista
Numa Lista Linear Sequencial a inicialização se
constitui em atribuir 0 a quantidade de
elementos existente na lista (indicada pela
variável n)
n = 0;
9
0 1 2 3... ... 6 7
8
6
Inserção mantendo a Ordem
Consiste em adicionar um valor no vetor, mantendo
a ordem existente e ajustando o total de elementos.
Só pode ocorrer, no entanto, se a lista não estiver
cheia.
Protótipo:
void inserirEmOrdem(float [], float , int &, int);
7
Mecanismo de Inserção
Supondo a lista ordenada, onde n == 6 (existem 6
elementos):
0 1 2 3 4 5 6 7 8 9
1.5 2.7 3.6 4.1 4.7 5.9
0 1 2 3 4 5 6 7 8 9
9
Mecanismo de Inserção
Continua o deslocamento até chegar a posição
de inserção do 4,5 – posição 4
0 1 2 3 4 5 6 7 8
9
1.5 2.7 3.6 4.1 4.7 5.9 5.9
0 1 2 3 4 5 6 7 8 9
10
Mecanismo de Inserção
Insere o 4.5
0 1 2 3 4 5 6 8 9
7
1.5 2.7 3.6 4.1 4.5 4.7 5.9
11
Busca Binária
Consiste em fazer uma busca em um vetor já
ordenado 9
0 1 2 3 4 5 6 7
1.5 2.7 3.6
8 4.1 4.5 4.7 5.9
12
Mecanismo da Busca Binária
Supondo-se que deseja-se buscar o valor 4.7 no
vetor
0
1.5 2.7 1
3.6 2
4.1 3
4.5 4
4.7 5
5.9 6 7 8 9
0
1.5 2.7 1
3.6 2
4.1 3
4.5 4
4.7 5
5.9 6 7 8 9
meio 13
Mecanismo da Busca Binária
Espaço de busca
Comparações: 1a
0
1.5 1
2.7 2
3.6 3
4.1 4
4.5 5
4.7 6
5.9 7 8 9
14
Mecanismo da Busca Binária
4 5 6 4.7?
4.5 4.7 5.6
Comparações: 2a
meio
Espaço de busca
Se a chave de busca (valor procurado) é igual ao valor central do vetor (meio) – a
busca termina com sucesso
Se a chave de busca (valor procurado) é menor que o valor central do vetor (meio) –
a busca continua na primeira metade do vetor
Se a chave de busca (valor procurado) é maior que o valor central do vetor (meio) –
a busca continua na segunda metade do vetor
O processo se repete até que o elemento seja encontrado – a posição, onde o elemento foi
encontrado, é retornada
Ou, até que o espaço de busca termine (busca acaba sem sucesso) – o valor -1 é retornado
(posição inválida) – indica que o valor procurado não foi encontrado.
No Exemplo, a busca termina com sucesso e o valor 5 (posição do vetor onde o
elemento foi encontrado) é retornado como resposta pela função que realiza a busca
binária.
15
Busca Sequencial X Busca Binária
Supondo-se o
0 1 2 3 4 5 6 4.7?
vetor:
1.5 2.7 3.6 4.1 4.5 4.7 5.9
16
Busca Sequencial X Busca Binária
Busca por um registro entre 1000
Busca Binária
complexidade: O(log n)
pior caso: (maior inteiro imediatamente menor que (log n)) + 1
comparações = 10 comparações, ou seja, 10 acessos a disco.
Busca Sequencial
complexidade: O(n)
pior caso: 1000
em média: 500
A busca binária é mais eficiente na maioria dos casos
(mais veloz)
A busca sequencial tem a vantagem de poder ser aplicada a
qualquer vetor (no sentido de não haver obrigatoriedade
dos elementos do vetor vetor terem que estar
ordenados).
17
Remoção mantendo Ordem
Consiste em retirar um valor do vetor, mantendo a
ordem
existente e ajustando o total de elementos.
Só pode ocorrer, no entanto, se a lista não estiver vazia.
Caso ocorra a remoção, o total de elementos da lista
deve ser decrementado.
Protótipo:
void removerEmOrdem(float [], float , int &);
18
Mecanismo de Remoção
Supondo a lista ordenada, onde n == 7 (existem 7
elementos): 9
0 1 2 3 4 5 6 7
1.5 2.7 3.68 4.1 4.5 4.7 5.9
19
Mecanismo de Remoção
Atualiza-se a quantidade de elementos da lista:
n--; (no exemplo n passa a ser 6)
A partir da posição seguinte do elemento a ser
removido, até o final, move-se os elementos
para posição anterior
0 1 2 3 4 5 6 7 8
9
1.5 2.7 3.6 4.1 4.5 4.7 5.9
0 1 2 3 4 5 6 7 8 9
1.5 2.7 4.1 4.1 4.5 4.7 5.9
20
Mecanismo de Remoção
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
21
Mecanismo de Remoção
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
22
Mecanismo de Remoção
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
N == 6
23
%d:",i);
scanf("%f",&vet[i]);
}
printf("\nDigite o valor que deseja buscar:");
scanf("%f", &x);
while (inicio <= fim)
{
meio = (inicio + fim)/2;
if(x == vet[meio]) //modificacao
{
printf("\nO valor esta na posicao: %d\n",
meio);
}
for(i = 0; i < 5; i++)
{
if(x == vet[i])
{
inicio = (fim + 1);
//essa condicao é para sair do while
printf("\nO valor esta na posicao:
%d\n", i);
}
else if(x < vet[i])
{
fim = meio-1;
else {
printf("\nTentou buscar de uma lista vazia");
// Se a lista nao exister preenchida exibe
mensagem informando lista vazia
}
getch();
return NULL;
}
if(!lista_vazia(lista)) {
/* procura elemento na lista, guardando
anterior */
while(aux!= NULL && aux->valor != valor) {
ant = aux;
aux = aux->prox;
Atividade Avaliativa – AULA 3 Em dupla
1- Faça um programa que escreva uma busca sequencial de
tamanho 20 para armazenar valores inteiros. Seu
programa deve solicitar os valores de entrada e fazer a
buscar de um elemento.
Nota: 0,5.
Entregar: 21/08/2019.
Não é aceito em outra aula.
26