busca ordenada em c/c++?
Pessoal fiz o seguinte código
#include <stdio.h>
#include <conio.h>
// BUSCA SEQUENCIAL ORDENADA
main()
{
int const MAX=5; // tamanho do vetor e laço for
int vet[MAX], i, val;
for (i=1;i<=MAX;i++)
{
printf("Digite um valor: ");
scanf("%d",&vet[i]);
}
printf("\n\nDigite o valor a ser procurado: ");
scanf("%d",&val);
i=0; //detalhe importante
while (val!=vet[i])
{
i++;
}
if ((i<=MAX)&&(val==vet[i]))
{
printf("\nencontrado na posicao %d do vetor",i);
}
else
printf("\nvalor nao encontrado no vetor");
getch();
}
ele faz a busca no vetor independente da ordem e da a localização do vetor, o que estou tentando fazer é que ele para de fazer a busca caso não esteja ordenado em ordem crescente.
obs: sei que deve ser feito no while. mas não estou conseguindo,
podem me ajudar por favor.
Comments
Cara, veja esse seu loop:
i=0; //detalhe importante
while (val!=vet[i])
{
i++;
}
Do jeito como está, i pode passar de MAX. Você primeiramente deve colocar uma condição de parada. Além disso, você deve começãr a buscar no 1, não no zero, pois foi assim que você fez no for acima.
i=1; //detalhe realmente importante
while ((i<=MAX) && (val!=vet[i]))
{
i++;
}
No final desse loop, se i vale 6 é porque não foi encontrado. Se vale de 1 até MAX, é porque foi encontrado e i terá a posição do encontro. Para parar a busca quando o valor é menor que o anterior (ou seja, não está ordenado em ordem crescente), basta criar uma variável anterior e comparar, a cada passada do if.
int anterior;
i=1; //detalhe realmente importante
while ((i<=MAX) && (val!=vet[i]))
{
anterior = vet[i];
i++;
if ((i<=MAX) && (vet[i]<anterior)) {
i = 6;
break;
}
}