Programa de BUSCA BINÁRIA

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

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.