UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 BUSQUEDA BINARIA La búsqueda es una tarea que se realiza permanentemente, en toda actividad, cuando se está en un supermercado uno busca artículos en particular, en una multitud de gente se busca a alguien en especial, en un directorio se busca a una persona, como se observa la búsqueda está presente en cada una de las actividades. Los algoritmos más utilizados para la realización de búsquedas son: Lineal o Secuencial Binaria. Hash (transformación de claves). La búsqueda lineal es efectiva, pero no es la más eficiente, si se tiene gran cantidad de información, esta búsqueda pude ser tediosa, por consiguiente se han desarrollado diferentes algoritmos, que permiten realizar búsquedas más efectivas, como es el caso de la búsqueda binaria, este algoritmo tiene una pequeña restricción es que solo realiza búsquedas efectivas si el arreglo está ordenado. El algoritmo de búsqueda binaria, divide el vector en dos y compara el elemento central con el valor que se está buscando, si el elemento es mayor se realizar divisiones sucesivas hacia la derecha, de aso contrario la hará hacia la izquierda, gráficamente si se tiene un vector de 8 elementos ordenados y se quiere encontrar un valor en especial, para este caso el 19, se procede así: El primer paso que se realiza es examinar el valor central del vector, o sea la casilla número 4 (8 div 2), como el contenido de ella es menor que el número a buscar se puede descartar la búsqueda en las casillas ubicadas a la izquierda. La búsqueda binaria es la técnica de más alta velocidad y funciona eficientemente con arreglos grandes y ordenados previamente. Consiste en eliminar, tras cada comparación, la mitad de los elementos del arreglo en los que se efectúa la búsqueda. Primero localiza el elemento central del arreglo y luego lo compara con la clave de búsqueda. Si son iguales, se ha encontrado dicha clave y se devuelve el subíndice de ese elemento. De otro modo, el problema se reduce a buscar en una mitad del arreglo. UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 A continuación se repite este procedimiento, comparando el valor a la derecha Ahora el elemento central es mayor que el valor que se está buscando, por lo tanto hay que proceder hacia la izquierda encontro = 0 menor = 1 mayor = n mientras menor <= mayor hasta central = (mayor + menor ) div 2 si X[central] = valor haga mostrar “Elemento encontrado en la posición “, central encontro =1 fin si si X[central] < valor haga menor = central + 1 si no haga mayor = central - 1 fin si fin mientras si encontro = 0 haga mostrar “No se encontró el elemento“ fin si UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 El código para la búsqueda binaria es el siguiente: #include <stdio.h> #include <conio.h> #include <iostream> using namespace std; // Prototipos de las funciones. void MostrarVector(int *arreglo, int n); int buscar(int valor, int *arreglo, int n); void main(void) { int n; // cantidad de elementos del vector int valor; // numero a buscar int i; // Contador int arreglo[100];// Arreglo de enteros system (“cls”); cout<<"Digite el numero de elementos:"; cin>> n; for (i=0;i<n;i++) { Menor, mayor y central cout<<"Digite un valor para la posicion :", <<i<<" "; cin>>arreglo[i]; } cout<<"Digite el numero a buscar:"; cin>>valor; cout<<"\nVector Leido:\n"; MostrarVector(arreglo,n); cout<<"\n inicia el proceso de Búsqueda binaria:\n"; if ((i=buscar(valor, arreglo, n)) != -1) cout<<"\nEncontrado en la posicion n"<<i; else cout<<"\nNo existe en el arreglo\n"; system (“”pause); } // función para mostrar en pantalla el vector void MostrarVector(int *arreglo, int n) { int i; // Contador for (i=0;i<n;i++) cout<< arreglo[i]; cout<<"\n"; } // función para realizar Búsqueda binaria. int buscar(int valor, int *arreglo, int n) { UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 int menor=0; // Posicion inferior de la sablista int mayor; // Posicion superior de la sablista int central; // Posicion central de la sablista mayor = n; while (menor <= mayor) { central = (mayor + menor) / 2; if (arreglo[central] == valor) return central; if (arreglo[central] < valor) menor = central + 1; else mayor = central - 1; } return -1; } Al igual que el código de la búsqueda lineal, se recomienda realzar la respectiva prueba de escritorio