Búsqueda Binaria Iterativa
La búsqueda binaria sirve para encontrar un valor dentro de un vector ordenado.
Por ejemplo:
2 5 8 12 16 20 25 30
Queremos encontrar 20.
En una búsqueda común, podríamos recorrer:
2 → 5 → 8 → 12 → 16 → 20
Pero la búsqueda binaria hace algo más inteligente:
- Mira el elemento del medio.
- Decide si tiene que buscar a la izquierda o a la derecha.
- Descarta la mitad que no sirve.
- Repite.
Por eso es mucho más rápida para vectores grandes.
2. ¿Por qué el vector tiene que estar ordenado?
Porque necesitamos poder decidir qué mitad descartar.
Por ejemplo:
2 5 8 12 16 20 25 30
Buscamos 25.
El medio es 12.
Como:
25 > 12
sabemos que 25 no puede estar a la izquierda de 12, porque el vector está ordenado.
Entonces descartamos:
2 5 8 12
y seguimos buscando solamente:
16 20 25 30
3. ¿Qué significa «iterativa»?
Iterativa significa que utilizamos un ciclo, normalmente while.
Por ejemplo:
while (inicio<=fin){// buscar}
No utilizamos recursividad.
Entonces:
- Búsqueda binaria iterativa → usa
while. - Búsqueda binaria recursiva → la función se llama a sí misma.
4. ¿Cómo hacemos esto con punteros?
Acá está la parte importante.
Supongamos:
intvector[] = {2, 5, 8, 12, 16, 20, 25, 30};
Normalmente accederíamos a un elemento así:
vector[3]
Si hacemos:
vector+3
obtenemos la dirección del 12.
Y:
*(vector+3)
obtiene el valor 12.
5. Los tres punteros que vamos a usar
Para hacer la búsqueda binaria vamos a tener:
int* inicio;
int* medio;
int* fin;
Representan:
inicio → primer elemento que estamos buscando
medio → elemento del medio
fin → último elemento que estamos buscando
Inicialmente:

Después calculamos:
medio=inicio+ (fin-inicio) /2;
Quedaría aproximadamente:

6. ¿Cómo sabemos qué hacer?
Comparamos:
*medio
con el valor que buscamos.
Hay tres posibilidades.
Caso 1: encontramos el valor
if (*medio==buscado)
Entonces terminamos.
Caso 2: el valor buscado es menor
elseif (buscado<*medio)
Tenemos que buscar hacia la izquierda.
Movemos fin:
fin=medio-1;
Caso 3: el valor buscado es mayor
else
Tenemos que buscar hacia la derecha.
Movemos inicio:
inicio=medio+1;
7. Ejemplo completo
Vamos a hacer un programa que busque 20.
#include <stdio.h>
int busquedaBinaria(int *vector, int cantidad, int buscado)
{
int *inicio = vector;
int *fin = vector + cantidad - 1;
while (inicio <= fin)
{
int *medio = inicio + (fin - inicio) / 2;
if (*medio == buscado)
{
return medio - vector;
}
else if (buscado < *medio)
{
fin = medio - 1;
}
else
{
inicio = medio + 1;
}
}
return -1;
}
int main()
{
int vector[] = {2, 5, 8, 12, 16, 20, 25, 30};
int cantidad = 8;
int buscado = 20;
int posicion;
posicion = busquedaBinaria(vector, cantidad, buscado);
if (posicion != -1)
{
printf("Elemento encontrado en la posicion %d\n", posicion);
}
else
{
printf("Elemento no encontrado\n");
}
return 0;
}