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;

    }

    }

Sign In or Register to comment.