es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué mi bucle while no se rompe y sigue registrando el índice buscado en mi búsqueda binaria infinitamente?

Usando javascript, he estado intentando la búsqueda binaria y he tomado un bucle while que recorrerá la lista de números hasta que el primer índice sea menor o igual al último. Luego calculo el punto medio o media y comparo el valor del índice del punto medio con el valor de entrada. Cuando coincide, muestra el índice del valor de entrada pero el bucle nunca termina.

function binary_search(value, array){
  var first = 0;
  var last = array.length - 1;

  while(first <= last){
    var midpoint = Math.floor((first + last) / 2);

    if(array[midpoint] == value){
      console.log(midpoint);
    }else if(array[midpoint] < value){
      first = midpoint + 1;
    }else if(array[midpoint] > value){
      last = midpoint -1;
    }
  }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Explicación de la Búsqueda Binaria en Javascript

    El código anterior es una implementación del algoritmo de búsqueda binaria en Javascript. Aquí está la explicación del código:

    Definición de función

    function binary_search(value, array){
    

    La función binary_search toma dos argumentos: el valor de entrada que se buscará en la matriz y una matriz en la que se realizará la búsqueda.

    Declaración de variables

    var first = 0;
    var last = array.length - 1;
    

    Se declaran las variables first y last, que mantienen el registro del índice de inicio y el índice final de la matriz, respectivamente.

    Loop While

    while(first <= last){ //el bucle continuará hasta que el primer índice sea menor o igual al último.
        var midpoint = Math.floor((first + last) / 2); //se calcula el punto medio sumando el primer y último índice y dividiendo por 2.
    
        if(array[midpoint] == value){ //se verifica si el valor del punto medio es igual al valor de entrada.
          console.log(midpoint); //si es así, se imprime el índice.
        }else if(array[midpoint] < value){ //si es menor que el valor de entrada,
          first = midpoint + 1; //se cambia el punto de inicio al punto medio + 1.
        }else if(array[midpoint] > value){ //si es mayor que el valor de entrada,
          last = midpoint -1; //se cambia el punto final al punto medio -1.
        }
    
      }
    

    El bucle while anterior continuará hasta que el primer índice sea menor o igual al último índice. En cada iteración, se calcula el punto medio sumando el primer y último índice y dividiendo por 2. Si el valor del punto medio es igual al valor de entrada, se imprime el índice del valor. Si el valor del punto medio es menor que el valor de entrada, se cambia el punto de inicio al punto medio + 1. Y si el valor del punto medio es mayor que el valor de entrada, se cambia el punto final al punto medio -1.

    Resultado

    Si el valor de entrada existe en la matriz, entonces se imprimirá su índice en la consola. Si no existe, el bucle continuará hasta el final y no imprimirá nada.

    Hay un problema con el código anterior: el bucle no se detiene después de encontrar el índice del valor de entrada. Para solucionar este problema, se puede agregar una instrucción return después de imprimir el índice para detener el bucle.

Comments are closed.