Está en la página 1de 13

Búsqueda (searching)

en arreglos
Problema de la búsqueda
 General: dado un arreglo A y un
elemento x, decidir si x está o no en
A.
 Específico: dado un arreglo de
enteros A y un entero x, hacer una
función que regrese el índice de x en
A o -1 si x no está en A.

Programación Avanzada Universida 2


d de Sonora
Ejemplo
Dado este arreglo:
int a[] = {5, 3, 20, 8, 2, 7};

System.out.println (busca (20, a));


debe escribir 2

System.out.println (busca (11, a));


debe escribir -1

Programación Avanzada Universida 3


d de Sonora
Soluciones al problema
Veremos dos soluciones clásicas:

 Búsqueda lineal.
 Búsqueda binaria.

Programación Avanzada Universida 4


d de Sonora
Búsqueda lineal
 Se busca el elemento en el arreglo de
principio a fin.
int buscaLineal (int x, int a[])
{
int index = 0;
while (index < a.length) {
if (a[index] == x)
return index;
index++;
}
return -1;
}

Programación Avanzada Universida 5


d de Sonora
Búsqueda binaria
 El arreglo debe estar ordenado de
menor a mayor o viceversa.
 Supongamos que el orden es de
menor a mayor.
 El algoritmo compara x (elemento a
buscar) con el elemento que está a la
mitad de A.

Programación Avanzada Universida 6


d de Sonora
Búsqueda binaria
 Hay 4 opciones:
 El elemento de en medio es x. Termina la
búsqueda con éxito.
 El elemento de en medio es mayor que x. Se
sigue buscando en la primera mitad de A.
 El elemento de en medio es menor que x.
Se sigue buscando en la segunda mitad de
A.
 No existe el elemento de en medio. Termina
la búsqueda con falla.

Programación Avanzada Universida 7


d de Sonora
Búsqueda binaria
 El paso anterior se continúa hasta
obtener éxito o falla.

Programación Avanzada Universida 8


d de Sonora
Búsqueda binaria
 Ejemplo:

buscar 7 en
int a[] = {3, 7, 12, 15, 22, 34, 45, 52};

¿Cómo se encuentra el elemento de en


medio?

Programación Avanzada Universida 9


d de Sonora
Búsqueda binaria
 Se manejan dos índices. Uno apunta
al primer elemento y el otro al último.
 Para
a[] = {3, 7, 12, 15, 22, 34, 45, 52},
se define:
bajo = 0 y alto = a.length – 1 = 7
 El elemento de en medio está en:
mid = (bajo + alto) / 2 = 7 / 2 = 3
Programación Avanzada Universida 10
d de Sonora
Búsqueda binaria
 Si se está buscando el 7 en
a[] = {3, 7, 12, 15, 22, 34, 45, 52}
 Se compara 7 con a[3] (con 15).
 Como 7 es menor que 15, ya no tiene
caso buscar en la parte derecha de A.
 El problema se limita a buscar 7 en
{3, 7, 12}

Programación Avanzada Universida 11


d de Sonora
Búsqueda binaria
 En Java los arreglos no pueden
cambiar de tamaño.
 Solo se cambian los índices.
 Se sigue buscando el 7 en
a[] = {3, 7, 12, 15, 22, 34, 45, 52}
pero ahora bajo es 0 y alto es 2.

Programación Avanzada Universida 12


d de Sonora
Seudocódigo búsqueda binaria
buscaBin (x, a[]) {
bajo = 0
alto = a.length - 1
while (bajo <= alto) {
mid = (bajo + alto) / 2
if (a[mid] > x)
alto = mid - 1
else if (a[mid] < x)
bajo = mid + 1
else
return mid // éxito
}
return -1 // falla
}

Programación Avanzada Universida 13


d de Sonora

También podría gustarte