Problema con la implementación del algoritmo de búsqueda binaria

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.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=478298&siteId=1
Recomendado
Clasificación