Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created August 7, 2019 17:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/e7b7cd3b190299dddd66168c8748b8b5 to your computer and use it in GitHub Desktop.
Save parzibyte/e7b7cd3b190299dddd66168c8748b8b5 to your computer and use it in GitHub Desktop.
<?php
/**
*
* Implementación del algoritmo de búsqueda binaria secuencial en un arreglo
* usando PHP
* Nota: este método sólo funciona con números
*
* Autor: parzibyte
* Web: parzibyte.me/blog
*/
function busquedaBinaria(&$arreglo, $busqueda)
{
$izquierda = 0;
$derecha = count($arreglo) - 1;
#Mientras el arreglo se pueda partir...
while ($derecha >= $izquierda) {
# Obtener el valor y elemento de la mitad del arreglo
$indiceDelElementoMedio = floor(($izquierda + $derecha) / 2);
$elementoDelMedio = $arreglo[$indiceDelElementoMedio];
# ¿Lo que buscamos está en la mitad del arreglo? entonces regresa el índice
if ($busqueda === $elementoDelMedio) {
return $indiceDelElementoMedio;
} else {
# Si no, partimos el arreglo dependiendo de la búsqueda
if ($busqueda > $elementoDelMedio) {
# Si está a la derecha, lo partimos desde el medio + 1 hasta el elemento dado por derecha
$izquierda = $indiceDelElementoMedio + 1;
} else {
# Si está a la izquierda, lo partimos desde el medio - 1 hasta el elemento dado por izquierda
$derecha = $indiceDelElementoMedio - 1;
}
}
# El ciclo continúa, pero ya cambiamos izquierda o derecha según haya sido el caso
}
# Si llegamos a este punto es porque la búsqueda no se encuentra
return -1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment