Algoritmo para pesquisa e ordenação em Linguagem C.
Este projeto apresenta os quatro principais métodos de ordenação e pesquisa usados na computação. Foi desenvolvido em linguagem C.
métodos:
selecao Direta: este método compara cada elemento do vetor com o elemento da vez. Se for maior ele troca.
Buble Sort: este método compara o elemento da posiçao em questão com a posicao seguinte, se o próximo elemento for menor, então ele troca, e vai fazendo isso até o vetor ficar totalmente ordenado.
pesquisa sequencial: pesquisa elemento a elemento do vetor até encontrar, se encontrado, imprime o elemento, ou retorna, aí vai da preferência de cada um em adaptar o método. Se não encontrar ele imprime: não encontrado!
Pesquisa binária: melhor método, pois ele se coloca no meio do vetor e pergunta: o elemento é maior que meio? Se sim, o limite inferior passa a ser o meio +1. Se o elemento for menor que o meio, então limite superior recebe meio -1. Se nenhum dos dois é por que o elemento foi encontrado. Detalhe: este método só funciona se o vetor estiver devidamente ordenado! Ele é muito útil em casos de pesquisa com lista gigantesca de números, pois ele vai excluindo metades em metades até achar o elemento desejado, ao invés de percorrer elemento a elemento!
#include <conio2.h>
#include <stdlib.h>
#include <stdio.h>
#define MAX 10
/**
======================== Ordenacao e pesquisa ================================
**/
// selecao direta
void selecaoDireta(int n, int vet[]){
int i, j, aux, posicao;
for(i=0; i<n-1; i++){
posicao = i;
for(j= i+1; j<n; j++){
if(vet[j]<vet[posicao])
posicao = j;
}
aux = vet[posicao];
vet[posicao] = vet[i];
vet[i] = aux;
}
}
// bolha
void bublleSort(int n, int vet[]){
int i, aux, trocou;
do{
trocou = 0;
for(i=0; i<n-1; i++){
if(vet[i]>vet[i+1]){
aux = vet[i];
vet[i] = vet[i+1];
vet[i+1] = aux;
trocou = 1;
}
}
n--;
}while(trocou);
}
void imprimeVet(int n, int vet[]){
int i;
printf("\n\nvetor ordenado: \n\n");
for(i=0; i<n; i++){
printf("%d \n",vet[i]);
}
}
void mostraElemento(int elemento){
printf("\n\nElemento encontrado: %d\n\n",elemento);
}
//pesquisa sequencial
void pesquisaSequencial(int n, int elemento, int vet[]){
int i=0, achou=0;
while(i<=n && achou==0){
if(vet[i]==elemento){
achou = 1;
mostraElemento(vet[i]);
break;
}
else
i++;
}
if(achou==0)
printf("\n\nnao encontrado!\n\n");
}
// pesquisa binaria
void pesquisaBinaria(int limSuperior, int elemento, int vet[]){
int limInferior=0, achou=0, meio;
while(limInferior<=limSuperior && achou==0){
meio = (limInferior + limSuperior)/2;
if(elemento>vet[meio])
limInferior = meio+1;
else if(elemento<vet[meio])
limSuperior = meio-1;
else{
achou = 1;
printf("\n\nelemento encontrado: %d\n\n",vet[meio]);
break;
}
}
if(achou==0)
printf("\n\nElemento nao encontrado!\n\n");
}
int main() {
int vet[MAX] = {3, 4, 10, 8, 5, 4, 2, 7, 9, 11};
selecaoDireta(MAX, vet);
bublleSort(MAX, vet);
imprimeVet(MAX, vet);
pesquisaSequencial(MAX, 18, vet);
pesquisaBinaria(MAX, 19, vet);
return 0;
}