BUSQUEDA BINARIA
La búsqueda secuencial requiere, para el peor de los casos (cuando el elemento a buscar es el ultimo y no se encuentra) recorrer el vector o realizar un numero de comparaciones igual al tamaño del vector. Para vectores con muchos elementos esta búsqueda puede no resultar conveniente.
La búsqueda binaria requiere menos comparaciones (iteraciones ) que la secuencial pero para realizar la búsqueda se requiere que el vector este previamente ordenado.
La búsqueda binaria de un valor en un vector consiste en analizar, en primer lugar, el elemento central del vector, si el valor buscado es menor se buscara por el tramo inferior del vector utilizando la misma técnica, y si no por el tramo superior. En la segunda iteración el tramo a buscar es la mitad (bien derecha, bien izquierda) del vector y el elemento a evaluar es el central de este nuevo tramo. Esto supone claramente que el valor debe haber sido ordenado previamente; en el caso de la figura 1 se asume que los elementos del vector están en orden creciente.
Otra forma de implementarlo es de la siguiente manera:
#include <conio.h>
#include <stdio.h>
int a[7],i,j,k,x,temp;
int b[7],m,s,r,w,q;
void main (void)
{
clrscr();
for(x=0; x<7; x++)
{
printf("Introduzca valores para la localidad %d : ",x);scanf("%d",&a[x]);
}
for(j=0;j<7; j++)
{
for(i=0; i<6; i++)
{
if(a[i] > a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
else
{
}
}
}
for(k=0; k<7; k++)
{
printf("nEl valor de la localidad %d es %d ",k,a[k]);
}
/*---------------------------------------------------------------*/
printf("n Introduzca el valor que desea buscar: ");scanf("%d",&s);
if (a[6]<s)
{
printf("El numero que usted buscaba no se encuentra en el arreglo");
}
else
{
m=7/2;
r=m;
w=m;
q=7;
for(;;)
{
if(a[m]<s)
{
m=(q+m)/2;
q=q+r;
}
else if(s<a[m])
{
m=(q-w)/2;
q=q-w;
}
else if(s==a[m])
{
printf("Valor encontrado en la localidad %d", m+1);
break;
}
}
}
getch();
}