Programa de BUSCA BINÁRIA

1 resposta
L

Pessoal estou fazendo um programa, e preciso mediante o código abaixo retornar quantidade de comparações necessárias para a realização da busca, e também fazer uma busca de todos os elementos do vetor e apresentar média necessária de comparação na busca, o vetor é de 1000 posições.

// Classe que contém um array de inteiros aleatórios e um método

// que utiliza a pesquisa binária para localizar um inteiro.

import java.util.Random;

import java.util.Arrays;
public class BuscaBinaria

{

private int[] data; // array de valores

private static Random generator = new Random();
// cria um array de um dado tamanho e o preenche com inteiros aleatórios

public BuscaBinaria( int tamanho )

{

data = new int[ tamanho ]; // cria espaço para o array
// preenche o array com valore inteiros aleatórios no intervalo de 10-100

for ( int i = 0; i < tamanho; i++ )

data[ i ] = 10 + generator.nextInt( 90 );

Arrays.sort( data );
} // fim do construtor de BuscaBinaria

// realiza uma pesquisa binária nos dados

public int pesquisaBinaria( int pesquisaElemento )

{

int areaBaixa = 0; // extremidade baixa da área de pesquisa

int areaAlta = data.length - 1; // extremidade alta da área de pesquisa

int areaMedia = ( areaBaixa + areaAlta + 1 ) / 2; // elemento do meio

int local = -1; // valor retornado quando não localizado
do // faz um loop para busca do elemento

{

// imprime os elementos remanescentes do array

System.out.print( saidaElementos( areaBaixa, areaAlta ) );
// geração de espaços para alinhamento

for ( int i = 0; i < areaMedia; i++ )

System.out.print( " " );

System.out.println( " * " ); // indicará o meio atual

// caso o elemento for localizado no meio
if ( pesquisaElemento == data[ areaMedia ] )
local = areaMedia; // esta variável está recebendo o meio atual, ou seja, sua localização

// quando o valor do meio é muito alto
else if ( pesquisaElemento < data[ areaMedia ] )
areaAlta = areaMedia - 1; // eliminará a metade mais alta
else // quando o valor do meio é muito baixo
areaBaixa = areaMedia + 1; // eliminará a metade mais baixa

areaMedia = ( areaBaixa + areaAlta + 1 ) / 2; // executa o recálculo do meio
} while ( ( areaBaixa <= areaAlta ) && ( local == -1 ) );

return local; // irá retornar a localização da chave de busca
} // fim do método BuscaBinaria

// este método irá gerar a saída de determinados valores no array

public String saidaElementos( int elemento1, int elemento2 )

{

StringBuffer analise = new StringBuffer();
// irá gerar espaços para alinhamento

for ( int i = 0; i < elemento1; i++ )

analise.append( " " );
// gera a saída dos elementos que irão continuar no array

for ( int i = elemento1; i <= elemento2; i++ )

analise.append( data[ i ] + " " );
analise.append( “\n );

return analise.toString();

} // fim do método saidaElementos
// este método gera saída de valores no array

public String toString()

{

return saidaElementos( 0, data.length - 1 );

} // fim do método toString

} // fim do método BuscaBinária
// esta classe ChamadaBinaria irá utilizar a pesquisa binária para localizar um valor no array.

//import java.util.Scanner;

import java.util.*;
public class ChamadaBinaria

{

public static void main( String args[] )

{

// Está sendo criado um objeto Scanner para que seja possível inserção de dados
Scanner entradaValor = new Scanner( System.in );

int leituraInteiro; // Variável utilizada como chave de pesquisa
int posicaoElemento; // Variável para localização da chave de pesquisa no array
int compara=0;

// Está sendo criado e gerado um saída do Array

BuscaBinaria criaElemento = new BuscaBinaria( 10 );

System.out.println( criaElemento );
// Está lendo o valor de busca do usuário

System.out.print(

"Entre com um número INTEIRO ou (digite -1 para encerrar o programa): " );

leituraInteiro = entradaValor.nextInt(); //Entrada do usuário para pesquisa ou para finalizar

// o programa caso desejar !!!

System.out.println();
// insere repetidamente um inteiro; -1 encerra o programa

while ( leituraInteiro != -1 )

{

// irá utilizar a pesquisa binária na tentativa den encontrar o inteiro informado pelo

// usuário

posicaoElemento = criaElemento.pesquisaBinaria( leituraInteiro );
// Irá entrar nesta condição quando o valor inteiro não é localizado

if ( posicaoElemento == -1 )

System.out.println( O Valor INTEIRO informado " + leituraInteiro +

" não foi localizado.\n );

else // Entrará nesta condição quando o valor inteiro foi localizado, retornando também

// para o usuário a posição em que ele se encontra.

System.out.println( "O valor INTEIRO informado " + leituraInteiro +

" foi encontrado e está na posicao " + posicaoElemento + .\n );
int resultado = (int) Math.pow(2,10)-1;

int resultado2 = resultado/2;

System.out.println("Quantidade de comparações necessárias é "+ resultado);

System.out.println("Média de comparação necessária: "+ resultado2);
// obtém nova entrada do usuário ou opção para encerrar o programa se desejar

System.out.print(

"Entre com um valor para ser consultado ou (digite -1 para encerrar o programa): " );

leituraInteiro = entradaValor.nextInt(); // lê um int do usuário

System.out.println();

} // fim do while

} // fim de main

} // fim da classe ChamadaBinaria

1 Resposta

ViniGodoy

Por favor, não duplique tópicos, nem use letras maiúsculas nos títulos.

Seu outro tópico: http://www.guj.com.br/posts/list/220596.java

Na dúvida sobre qual tópico abrir, abra em um só e nós da moderação o moveremos, caso você tenha se enganado.

Esse tópico será trancado.

Criado 5 de outubro de 2010
Ultima resposta 5 de out. de 2010
Respostas 1
Participantes 2