ao analizar este codigo do mei livro do Deitel, me deparei denovo com uma duvida que ja tinha a um bom tempo, eu ja entendi o codigo, e como funciona uma pesquisa binaria, mas, sempre fique intrigado, por que ao definir o ponto maximo do array, é usado " -1 " depois da chamado do metodo length da array ?
desde ja, obrigado
import java.util.Random;
import java.util.Arrays;
public class BinaryArray
{
private int[] data; // array de valores
private static Random generator = new Random();
public BinaryArray( int size )
{
data = new int[ size ];
for ( int i = 0; i < size; i++ )
data[ i ] = 10 + generator.nextInt( 90 );
Arrays.sort( data );
}
public int binarySearch( int searchElement )
{
int low = 0;
int high = data.length - 1;
int middle = ( low + high + 1 ) / 2;
int location = -1;
do
{
System.out.print( remainingElements( low, high ) );
for ( int i = 0; i < middle; i++ )
System.out.print( " " );
System.out.println( " * " ); // indica o meio atual
if ( searchElement == data[ middle ] )
location = middle; // a localização é o meio atual
else if ( searchElement < data[ middle ] )
high = middle - 1; // elimina a metade mais alta
else
low = middle + 1; // elimina a metade mais baixa
middle = ( low + high + 1 ) / 2; // recalcula o meio
} while ( ( low <= high ) && ( location == -1 ) );
return location;
}
public String remainingElements( int low, int high )
{
StringBuffer temporary = new StringBuffer();
for ( int i = 0; i < low; i++ )
temporary.append( " " );
for ( int i = low; i <= high; i++ )
temporary.append( data[ i ] + " " );
temporary.append( "\n" );
return temporary.toString();
}
public String toString()
{
return remainingElements( 0, data.length - 1 );
}
}