Escolar Documentos
Profissional Documentos
Cultura Documentos
5. Ordenação e Pesquisa
A ordenação facilita o acesso aos dados. Quando recebemos um conjunto de dados desordenados,
devemos realizar sobre eles um pré-processamento de forma a classificá-los. Muitas vezes necessitamos
organizar uma estrutura de dados para facilitar a pesquisa. Para alcançarmos um dado armazenado na
estrutura, também temos que usar métodos de pesquisa (busca) eficientes. Neste tópico iremos tratar
métodos clássicos de ordenar uma lista desordenada implementada com vetores e métodos de pesquisa
para buscas em uma lista estática ordenada.
Ordenação
Os métodos de ordenação de dados realizam classificações segundo uma chave de ordenação. Nesta
chave, especifica-se o tipo de ordem que queremos dar aos dados (crescente, decrescente, etc.) e o campo
da estrutura que será afetado (campo nome, campo matrícula, etc.). Tipos de métodos de ordenação:
Por troca: são baseados na troca de posição dos dados, de forma a ordená-los.
Por seleção:parte do princípio de realizar o isolamento de elementos para posições
ordenadas.
Por inserção: baseiam-se no deslocamento de elementos da estrutura frente a um elemento
de busca.
Imagine as cartas de um baralho:
Para ordenar as cartas utilizando troca, espalhe-as voltadas para cima e então troque as
cartas fora de ordem até que todo baralho esteja ordenado;
Utilizando seleção, espalhe as cartas na mesa, selecione a carta de menor valor, retire-a do
baralho e coloque-a na mão. O processo continua e termina quando todas as cartas
estiverem na sua mão;
Para ordenar as cartas por inserção, segure todas as cartas na mão. Ponha uma carta por vez
na mesa, sempre a inserindo na posição correta.
A figura a seguir mostra o que acontece com o vetor no decorrer da execução do método da bolha.
76
Estrutura de Dados
77
Estrutura de Dados
A figura a seguir mostra o que acontece com o vetor no decorrer da execução do método de
ordenação por seleção.
78
Estrutura de Dados
Inserção Direta: Neste método, considera-se o segmento já ordenado como sendo formado pelo
primeiro elemento do vetor de chaves. Os demais elementos, ou seja do 2º ao último, pertencem ao
segmento não ordenado. A partir desta situação inicial, toma-se um a um dos elementos não ordenados, a
partir do primeiro e, por busca seqüencial realizada no segmento já ordenado, localiza-se a sua posição
relativa correta. Após a inserção, a fronteira entre os dois segmentos é deslocada uma posição para a
direita, indicando, com isto, que o segmento ordenado ganhou um elemento e o não ordenado perdeu um.
O processo prossegue até que todos os elementos do segundo segmento tenham sido inseridos no
primeiro. A figura a seguir mostra o que acontece com o vetor no decorrer da execução deste método.
79
Estrutura de Dados
Pesquisa
Busca de dados dentro de um conjunto. A Busca seqüencial procura do primeiro ao último
elemento do vetor até encontrar o elemento. Método mais simples, já utilizado nos nossos programas. A
Busca Binária é o método aplicado para conjunto de dados ordenados. Muito parecido com o método que
usamos quando desejamos procurar um número numa lista telefônica.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
// Programa para executar metodos de ordenação numa lista desordenada
// estatica
void linha()
{ int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec()
{ system("cls");
printf("Ordenacao e Pesquisa\n");linha();
}
80
Estrutura de Dados
turma[qa].media= (turma[qa].nota1+turma[qa].nota2)/2;
soma += turma[qa].media;
if (turma[qa].media>=6)
{ turma[qa].sit= 'A';
ap++;
}
else
{ turma[qa].sit= 'R';
rp++;
}
qa++;
printf("\n\n\tAluno Inserido com Sucesso!!!\n\n");
printf("\n\n\tContinuar inserindo aluno (1-sim/2-nao)? ");
scanf("%d",&cont);
}while (cont == 1);
}
82
Estrutura de Dados
if (matcon >turma[meio].mat)
inicio = meio +1;
else
fim = meio -1;
}
if (achou == 0)
printf("\n\n\tNumero de Matricula Incorreto!!!!!!\n\n");
printf("\n\n\tContinuar consultando aluno(1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
//Programa principal
main()
{ op = 1;
soma = 0;
ap = rp = qa =0;
while (op != 0)
{ cabec();
printf("Opcoes: \n\n");
printf(" 1- Inserir Aluno\n\n");
printf(" 2- Ordenacao Bolha\n\n");
printf(" 3- Ordenacao por Selecao\n\n");
printf(" 4- Ordenacao por Insercao\n\n");
printf(" 5- Busca Sequencial\n\n");
printf(" 6- Busca Binaria\n\n");
printf(" 7- Listagem\n\n");
printf(" 0- Sair do Programa\n");
linha();
printf(" Informe a Opcao desejada: ");
scanf("%d",&op);
switch(op)
{ case 1: inserir(); break;
case 2: bolha(); break;
case 3: selecao(); break;
case 4: insercao(); break;
case 5: sequencial(); break;
case 6: binaria(); break;
case 7: listagem(); break;
case 0: break;
default: printf("\nOpcao Invalida!!!!"); getche();break;
}
}
}
84
ALGORITMOS DE ORDENAÇÃO
Comparações