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