Usando javascript
, he estado probando la búsqueda binaria y he tomado un ciclo while que repetirá la lista de números hasta que el primer índice sea menos que igual al último. Luego calculo el punto medio o la 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 ciclo 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; } } }
No hay nada que detenga su ciclo, una vez que llega a su declaración if
if(array[midpoint] == value){ console.log(midpoint); }
Y si la declaración devuelve verdadero ya que ya no regresa, rompe o cambia los valores de primero/último, el ciclo seguirá repitiéndose. Lo más probable es que deba incluir una declaración de ruptura dentro de esa declaración if. Me gusta:
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); break; }else if(array[midpoint] < value){ first = midpoint + 1; }else if(array[midpoint] > value){ last = midpoint -1; } } }