Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created August 7, 2019 17:26
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/6565f0de53784117e868e8c0275fdf4b to your computer and use it in GitHub Desktop.
Save parzibyte/6565f0de53784117e868e8c0275fdf4b to your computer and use it in GitHub Desktop.
<?php
/**
*
* Implementación del algoritmo de búsqueda binaria recursiva en un arreglo
* usando PHP
* Nota: este método sólo funciona con números
*
* Autor: parzibyte
* Web: parzibyte.me/blog
*/
function busquedaBinariaRecursiva(&$arreglo, $busqueda, $izquierda, $derecha)
{
/*
Comprobar si ya no podemos partir el arreglo
*/
if ($izquierda > $derecha) {
return -1;
}
# 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;
return busquedaBinariaRecursiva($arreglo, $busqueda, $izquierda, $derecha);
} else {
# Si está a la izquierda, lo partimos desde el medio - 1 hasta el elemento dado por izquierda
$derecha = $indiceDelElementoMedio - 1;
return busquedaBinariaRecursiva($arreglo, $busqueda, $izquierda, $derecha);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment