Menu
Coddy logo textTech

Búsqueda binaria

Última actualización

La búsqueda binaria encuentra un valor objetivo en un arreglo **ordenado** reduciendo repetidamente la ventana de búsqueda a la mitad. Compara el elemento central con el objetivo: si coinciden, la búsqueda termina; si no, se descarta la mitad que no puede contener el objetivo y la ventana se reduce a la otra mitad. Cada comparación elimina la mitad de los elementos restantes, y por eso se ejecuta en O(log n): buscar entre un millón de valores ordenados requiere como máximo unas 20 comparaciones.

La animación de arriba muestra los punteros lo, mid y hi y atenúa la mitad eliminada tras cada comparación. La única precondición innegociable: el arreglo ya debe estar ordenado — con datos desordenados necesitas la búsqueda lineal o primero un ordenamiento (mira el merge sort). La misma idea de dividir a la mitad impulsa el árbol binario de búsqueda.

Complejidad temporal y espacial

CasoComplejidadNotas
Mejor casoO(1)El elemento central es el objetivo en la primera comparación.
Caso promedioO(log n)Cada comparación reduce a la mitad la ventana restante.
Peor casoO(log n)La ventana se reduce a un solo elemento antes de acertar o fallar.
EspacioO(1)La versión iterativa solo guarda los índices lo, hi y mid.

Paso a paso

PasoQué ocurre
1Asigna a lo el primer índice y a hi el último índice del arreglo ordenado.
2Calcula el índice central: mid = (lo + hi) // 2.
3Si a[mid] es igual al objetivo, devuelve mid — encontrado.
4Si a[mid] es **menor** que el objetivo, este solo puede estar en la mitad derecha: asigna lo = mid + 1.
5Si a[mid] es **mayor** que el objetivo, busca en la mitad izquierda: asigna hi = mid - 1.
6Repite desde el paso 2 mientras lo <= hi; si la ventana se vacía, el objetivo no está en el arreglo.

Ejemplo resuelto

Buscando 5 en [1, 2, 3, 5, 7, 8, 9]:

PasadaVentana (lo..hi)mida[mid]Acción
1[1, 2, 3, 5, 7, 8, 9] (0..6)35a[3] = 5 — objetivo encontrado en el índice 3.

Un fallo, paso a paso

Buscar 4 en el mismo arreglo muestra cómo se vacía la ventana:

PasadaVentana (lo..hi)mida[mid]Acción
10..6355 > 4 — busca en la mitad izquierda, hi = 2.
20..2122 < 4 — busca en la mitad derecha, lo = 2.
32..2233 < 4lo pasa a ser 3, la ventana se vacía: no encontrado.

Cuándo usar la búsqueda binaria

Úsala cuandoEvítala cuando
Los datos ya están ordenados (o los buscas muchas veces)Los datos están desordenados y se buscan una sola vez — ordenar primero cuesta O(n log n)
La colección permite acceso aleatorio rápido (arreglos)Solo tienes acceso secuencial (listas enlazadas)
El conjunto de datos es grande — O(log n) brilla a gran escalaEl conjunto de datos es diminuto — un recorrido simple es igual de rápido y más sencillo

Una implementación limpia y ejecutable de Binary Search en Python, JavaScript, Java, C++, C, Pseudocode. Elige un lenguaje, copia el código o ábrelo ya cargado en el Playground de Coddy.

Código de Binary Search en Python

Python
1def binary_search(a, target):2    lo, hi = 0, len(a) - 13    while lo <= hi:4        mid = (lo + hi) // 25        if a[mid] == target:6            return mid7        if a[mid] < target:8            lo = mid + 1  # search the right half9        else:10            hi = mid - 1  # search the left half11    return -112
13
14nums = [1, 2, 3, 5, 7, 8, 9]  # must be sorted15print("Index of 5:", binary_search(nums, 5))16print("Index of 4:", binary_search(nums, 4))
Ejecuta este código en el Playground de Python

Preguntas frecuentes sobre la búsqueda binaria

¿Cuál es la complejidad temporal de la búsqueda binaria?
O(log n) en los casos promedio y peor, porque cada comparación reduce a la mitad la ventana de búsqueda restante, y O(1) en el mejor caso, cuando el primer elemento central es el objetivo. La versión iterativa usa O(1) de espacio adicional.
¿Por qué la búsqueda binaria requiere un arreglo ordenado?
El paso de dividir a la mitad depende del orden: comparar el objetivo con el elemento central solo te dice qué mitad descartar si todo lo que está a la izquierda del centro es menor y todo lo que está a la derecha es mayor. Con datos desordenados esa inferencia no es válida — usa la búsqueda lineal en su lugar, u ordena primero.
¿Cuál es la diferencia entre la búsqueda binaria y la búsqueda lineal?
La búsqueda lineal recorre los elementos uno por uno (O(n)) y funciona con cualquier arreglo; la búsqueda binaria divide a la mitad la ventana de búsqueda de un arreglo ordenado (O(log n)), pero requiere una entrada ordenada. Para un puñado de elementos la diferencia es insignificante — a gran escala la búsqueda binaria gana de forma contundente.
¿Cuántas comparaciones necesita la búsqueda binaria?
Como máximo unas log2(n) + 1: 10 comparaciones cubren 1,000 elementos, 20 comparaciones cubren 1,000,000. Ese crecimiento logarítmico es lo que la convierte en la búsqueda por defecto sobre datos ordenados.
¿Cuál es el clásico error de desbordamiento en la búsqueda binaria?
Calcular el centro como (lo + hi) / 2 puede desbordar los enteros de tamaño fijo cuando lo + hi supera el máximo del tipo. La forma segura es mid = lo + (hi - lo) / 2. En Python no importa (enteros de precisión arbitraria), pero en Java/C/C++ es un error real y famoso.
¿La búsqueda binaria es lo mismo que un árbol binario de búsqueda?
Comparten la idea de dividir a la mitad, pero difieren en estructura: la búsqueda binaria es un algoritmo sobre un arreglo ordenado, mientras que un árbol binario de búsqueda es una estructura de datos enlazada que mantiene sus claves ordenadas para que las búsquedas desciendan a la izquierda o a la derecha en cada nodo.
Coddy programming languages illustration

Domina los algoritmos con Coddy

COMENZAR