Pesquisa de Dados - Sequencial

Pesquisa Sequencial

O objetivo da pesquisa é procurar por um elemento dentro de uma coleção de elementos. O algoritmo de pesquisa sequencial possui este nome porque o objetivo dele é procurar o elemento de forma sequencialmente dentro de uma coleção de elementos.

Dado um vetor:

[5, 4, 0, 8, 7, 9]
  • Percorre os elementos de um vetor
  • Se o elemento procurado estiver dentro do vetor, imprime o valor do elemento e para de procurar pelo elemento no vetor.
  • Se não encontrou o elemento dentro do vetor, imprime uma mensagem informando que o elemento não foi encontrado.

Pesquisando o valor 0 (zero)

Quando pesquisamos o número 0 (zero) dentro do vetor temos o seguinte fluxo:

O contador está com valor 0 (zero) e verifica se o número dentro do vetor na posição do contador é igual ao número procurado 0 (zero).

O contador está com valor 0 (zero) e verifica se o número dentro do vetor na posição do contador é igual ao número procurado 0 (zero).

Como o número que está dentro do vetor não é o número que está sendo procurado, então incrementa em 1 o valor do contador e verifica novamente se o valor que está dentro do vetor na posição do contador é igual ao valor procurado.

Como o número que está dentro do vetor não é o número que está sendo procurado, então incrementa em 1 o valor do contador e verifica novamente se o valor que está dentro do vetor na posição do contador é igual ao valor procurado.

Como o número que está dentro do vetor ainda não é o número que está sendo procurado, então incrementa em 1 o valor do contador e verifica novamente se o valor que está dentro do vetor na posição do contador é igual ao valor procurado.

Como o número que está dentro do vetor ainda não é o número que está sendo procurado, então incrementa em 1 o valor do contador e verifica novamente se o valor que está dentro do vetor na posição do contador é igual ao valor procurado.

Encontrou o valor procurado dentro do vetor, então imprime uma mensagem avisando que encontrou o valor procurado.

Pesquisando o valor 3 (três)

Agora queremos pesquisar o valor 3 dentro do vetor, percorremos o vetor por completo e não encontramos o valor pesquisado:

Agora queremos pesquisar o valor 3 dentro do vetor.

Neste ponto o valor do contador é igual a o tamanho do vetor, ou seja, tamanho 6. Então devemos imprimir uma mensagem avisando que o valor pesquisado não está dentro do vetor.

Implementação do algoritmo de Pesquisa Sequencial

package pesquisa.sequencial;

public class Sequencial {
  public static void main(String[] args) {
    Sequencial seq = new Sequencial();
    
    int[] numeros = {5, 4, 0, 8, 7, 9};
    
    seq.pesquisarNumero(0, numeros);
    seq.pesquisarNumero(3, numeros);
  }
  
  /**
   * Método utilizado para procurar se um elemento está dentro do vetor.
   * Este método utiliza o algoritmo de Pesquisa Sequencial para encontrar
   * o elemento.
   * 
   * @param x    - Número que será procurado. 
   * @param numeros - Vetor de números.
   */
  public void pesquisarNumero(int x, int[] numeros) {
    int cont = 0;
    
    for(cont = 0; cont < numeros.length; cont++) {
      //Verifica se o elemento que está sendo procurado está no vetor.
      if (numeros[cont] == x) {
        //Se encontrou o elemento, imprime ele na tela e para a pesquisa.
        System.out.println("Encontrou o número " + x);
        break;
      }
    }
    
    //Verifica se não encontrou o elemento no vetor.
    if(cont >= numeros.length)
      System.out.println("Não encontrou o número " + x);
  }
}
  • Na linha 20, temos a assinatura do método que vai procurar um elemento dentro do vetor, utilizando o algoritmo de Pesquisa Sequencial.
  • Na linha 23, utilizamos um for para percorrer todos os elementos do vetor.
  • Na linha 25, verifica se o numero dentro do vetor, tem o mesmo valor que o número que está sendo procurado, e se encontrou o número então imprime ele na tela e para de pesquisar.
  • Na linha 33, verificamos se o tamanho do contador utilizado no for tem um valor maior que o tamanho do vetor, para verificar se já percorreu todo o vetor, mas não encontrou o valor procurado.

Utilizando pesquisa sequencial com objetos

O mesmo conceito de pesquisa sequencial pode ser aplicado para um vetor de Objetos, procurando algum objeto por um ou vários atributos.

package pesquisa.sequencial;

public class Sequencial2 {
  public static void main(String[] args) {
    Sequencial2 seq = new Sequencial2();
    
    Pessoa rafael = new Pessoa("Rafael", 24);
    Pessoa ana = new Pessoa("Ana", 18);
    Pessoa cristiano = new Pessoa("Cristiano", 25);
    Pessoa carla = new Pessoa("Carla", 28);
    
    Pessoa[] pessoas = {rafael, ana, cristiano, carla};
    
    Pessoa pessoaX = new Pessoa("Ana", 18);
    
    seq.pesquisarPessoa(pessoaX, pessoas);
  }
  
  /**
   * Método utilizado para procurar se um objeto Pessoa está dentro do vetor de
   * Pessoas, a procura é feita através do nome da Pessoa.
   * Utiliza o algoritmo de Pesquisa Sequencial para encontrar o elemento.
   * 
   * @param x    - Pessoa que será procurada. 
   * @param pessoas - Vetor de pessoas.
   */
  public void pesquisarPessoa(Pessoa x, Pessoa[] pessoas) {
    int cont = 0;
    
    for(cont = 0; cont < pessoas.length; cont++) {
      //Verifica se o elemento que está sendo procurado está no vetor.
      if(pessoas[cont].getNome().equals(x.getNome())) {
        //Se encontrou o elemento, imprime ele na tela e para a pesquisa.
        System.out.println("Encontrou a pessoa " + x.getNome());
        break;
      }
    }
    
    //Verifica se não encontrou o elemento no vetor.
    if(cont >= pessoas.length)
      System.out.println("Não encontrou a pessoa " + x.getNome());
  }
}
  • Na linha 27, temos a assinatura do método que vai procurar uma Pessoa dentro do vetor de pessoas, utilizando o algoritmo de Pesquisa Sequencial.
  • Na linha 30, utilizamos um for para percorrer todas as pessoas do vetor.
  • Na linha 32, verifica se o nome da pessoa dentro do vetor, tem o mesmo nome da pessoa que está sendo procurada, e se encontrou então imprime o nome da pessoa na tela e para de pesquisar.
  • Na linha 40, verificamos se o tamanho do contador utilizado no for tem um valor maior que o tamanho do vetor, para verificar se já percorreu todo o vetor, mas não encontrou alguma pessoa com o mesmo nome.

Outra forma de programar a pesquisa sequencial

Este mesmo algoritmo de busca sequencial pode ser programando de uma outra forma, sem afetar a estrutura do algoritmo, exemplo:

  /**
   * Método utilizado para procurar se um elemento está dentro do vetor.
   * Este método utiliza o algoritmo de Pesquisa Sequencial para encontrar o elemento.
   * 
   * @param x    - Número que será procurado. 
   * @param numeros - Vetor de números.
   */
  public void pesquisarNumero(int x, int[] numeros) {
    int cont = 0;
    
    /* Percorre o vetor até chegar no fim ou até encontrar o número no vetor. */
    while (cont < numeros.length && numeros[cont] != x)
      cont++;
    
    /* Verifica se não percorreu todos os elementos do vetor e se encontrou o 
    número dentro do vetor. */
    if (cont < numeros.length && numeros[cont] == x)
      System.out.println("Encontrou o número " + x);
    else /* Caso tenha percorrido todo o vetor e não encontrou o número. */
      System.out.println("Não encontrou o número " + x);
  }
  • Na linha 24, criamos um laço que enquanto não chegar ao fim do vetor ou não encontrar o valor procurado dentro do vetor, vai incrementando a variável cont.
  • Na linha 29, verifica se ainda não percorreu todos os elementos do vetor e se encontrou o valor procurado.
  • A linha 32 é executada se chegou ao fim do vetor e não encontrou o valor procurado.

Conteúdos relacionados