Binary Search
Binary Search (búsqueda binaria) es un algoritmo para buscar un valor en una lista ordenada. Usa la idea divide y vencerás: cada comparación elimina la mitad de los elementos restantes, por eso es muy rápido (tiempo ).
Requisito imprescindible: la lista tiene que estar ordenada (por ejemplo, de menor a mayor).
Algoritmo
- Mantienes dos índices:
low(inicio) yhigh(fin). - Calculas el punto medio
mid. - Comparas
lista[mid]con el valor buscadox:- si
lista[mid] == x→ lo encontraste; - si
lista[mid] < x→ el valor, si existe, está en la mitad derecha → actualizaslow = mid + 1; - si
lista[mid] > x→ está en la mitad izquierda →high = mid - 1.
- si
- Repetir hasta encontrarlo o hasta que
low > high(no existe).
Paso a paso con un ejemplo
Lista ordenada
[2, 5, 7, 12, 16, 23, 38, 56, 72, 91]
Buscamos 23.
- Inicial:
low = 0,high = 9. - Iteración 1:
mid = 0 + (9-0)//2 = 4→lista[4] = 1616 < 23→ descartamos izquierda →low = 5,high = 9.
- Iteración 2:
mid = 5 + (9-5)//2 = 7→lista[7] = 5656 > 23→ descartamos derecha →low = 5,high = 6.
- Iteración 3:
mid = 5 + (6-5)//2 = 5→lista[5] = 2323 == 23→ ¡encontrado en índice5!
Si hubiéramos buscado 20:
- tras unos pasos acabaríamos con
low > high→ concluimos “no encontrado”.
Variantes y notas importantes
- Complejidad: tiempo , espacio en la versión iterativa. La versión recursiva usa stack.
- Duplicados: si hay varios elementos iguales, la búsqueda estándar puede devolver cualquiera de ellos; para la primera o última ocurrencia hay pequeñas modificaciones (buscar siempre hacia la izquierda/derecha cuando haya igualdad).
- Estructura: necesita acceso por índice (arrays, listas con acceso aleatorio). En listas enlazadas no es buena idea porque acceder al medio no es .