Algoritmo de Búsqueda Binaria
Supongamos que los datos están ordenados de forma creciente. Se compara el valor buscado con la componente central del vector. Si coinciden, se ha encontrado el elemento buscado. En caso contrario, se reduce el intervalo de búsqueda a la mitad izquierda o derecha, según donde pueda encontrarse el valor buscado: si el elemento central es mayor que el valor buscado, la búsqueda debe continuar en la mitad izquierda; si es menor, debe continuar en la mitad derecha.
El algoritmo se repite sobre la mitad seleccionada, concluyendo cuando se encuentra el valor o cuando el intervalo de búsqueda se anula (lo que primero ocurra).
Si el vector contiene valores repetidos, este algoritmo obtendrá uno de ellos ya que necesariamente serán consecutivos.
PSEUDOCÓDIGO
MÓDULO busqueda_binaria
DATOS
PARÁMETROS
Recibe V() de tipo T
Recibe N entera
Recibe X de tipo T
VARIABLES
I, IZQ, DER, CEN enteras
INICIO
IZQ ← 1
DER ← N
CEN ← (N+1)\2 ** división entera
Mientras ( (V(CEN) ≠ X) y (IZQ < DER) ) hacer
Si ( V(CEN) > X ) entonces
DER ← CEN-1
sino
IZQ ← CEN+1
fin-si
CEN ← (IZQ+DER)\2
fin-mientras
Si ( V(CEN) = X ) entonces
Escribir "encontrado en la posición", CEN
sino
Escribir "no existe el valor buscado"
fin-si
FIN
CÓDIGO C
/*Búsqueda de un elemento en un vector ordenado (de menor a mayor)*/
busBin(int *v, int n, int x)
{
int izq=0;
int der=n-1;
int cen=n/2;
while((v[cen]!=x) && (izqx)
{
der=cen-1;
}
else
{
izq=cen+1;
}
cen=(izq+der)/2;
}
if(v[cen]==x)
{
printf("Encontrado %d en posición %d \n",x,cen+1);
}
else
{
printf("No encontrado %d \n",x);
}
}
Comentarios
Publicar un comentario