v_anon:
Soy nuevo en la programación. Tengo seis meses que he empezado la programación de aprendizaje y yo tratando de probar mi auto con algún algoritmo. Estoy tratando de implementar el algoritmo de búsqueda binaria. En teoría, he captado el concepto, pero en la implementación estoy teniendo algunos problemas.
A continuación se muestra la implementación del algoritmo:
public static boolean binarySearchNumber(int[] numbers, int number) {
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));
int lowIndex = 0;
int highIndex = numbers.length;
while(lowIndex!=highIndex) {
int midIndex = (lowIndex+highIndex)/2;
if(numbers[midIndex]==number) {
return true;
} else if(numbers[midIndex]>number) {
lowIndex = midIndex+1;
} else if(numbers[midIndex]<number) {
highIndex = midIndex-1;
}
}
return false;
}
La prueba de la unidad
@Test
public void testBinarySearchNumber() {
// setup
int[] numbers = new int[] { 1, 3, 55, 8, 22, 9, 11, 0 };
// execute
boolean found = ArrayUtil.binarySearchNumber(numbers, 8);
System.out.println(found);
}
Gracias de antemano.
renato:
más allá del error reportado en las otras respuestas, me encontré con otra:
public static boolean binarySearchNumber(int[] numbers, int number) {
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));
int lowIndex = 0;
int highIndex = numbers.length;
while (lowIndex != highIndex) {
int midIndex = (lowIndex + highIndex) / 2;
if (numbers[midIndex] == number) {
return true;
} else if (numbers[midIndex] < number) {
lowIndex = midIndex + 1;
} else if (numbers[midIndex] > number) {
highIndex = midIndex ; // here
}
}
return false;
}
midIndex
es en conjunto, no es necesario restar 1, de lo contrario tendrá siempre un elemento menos.
EDITAR
Otra forma de lograr los resultados deseados es cambiar la condición if según lo sugerido por @ respuesta de Eran.