Escolar Documentos
Profissional Documentos
Cultura Documentos
La búsqueda binaria sólo se puede implementar si el arreglo está ordenado. La idea consiste en ir dividiendo el arreglo
en mitades. Por ejemplo supongamos que tenemos este
“ vector: int vector[10] = {2,4,6,8,10,12,14,16,18,20}; La clave que queremos buscar es 6. El algoritmo funciona de la
siguen manera
2. Se determina un indice central, Icentro = (Iarriba + Iabajo)/2, en este caso quedaría centro = 4.
3. Evaluamos si vector[Icentro] es igual a la clave de busqueda, si es igual ya encontramos la clave y devolvemos centro.
4. Si son distintos, evaluamos si vector[Icentro] es mayor o menos que la clave, como el arreglo está ordenado al hacer
esto ya podemos descartar una mitad del arreglo asegurandonos que en esa mitad no está la clave que buscamos. En
nuestro caso vector[Icentro] = 4 < 6, entonces la parte del arreglo vector[0...4] ya puede descartarse. 5. Reasignamos
Iarriba o Iabajo para obtener la nueva parte del arreglo en donde queremos buscar. Iarriba, queda igual ya que sigue
siendo el tope. Iabajo lo tenemos subir hasta 5, entonces quedaria Iarriba = 9, Iabajo =
5. Y volvemos al paso 2. Si la clave no fuese encontrada en algun momento Iabajo > Iarriba, con un while vamos a
controlar esta condición para salir del ciclo en tal caso y devolver -1 (clave no encontrada). Hagamos modificaciones al
código de busqueda lineal para implementar una función de busqueda binaria. //Busqueda binaria //en un arreglo.
#include <iostream> using std::cout; using std::cin; using std::endl; void mostrarArreglo(const int[], int); //prototipo de
funcion que recibe un arreglo constante int busquedaBinaria(const int[], int, int); //arreglo, tamano, clave void
ordenarArreglo(int[], int); //prototipo que modifica y ordena el arreglo void intercambiar(int&, int&); //prototipo,
intercambia los valores de dos elementos
int main() { int clave =0; const int tamano = 15; int arreglo[tamano] = {25,17,13,16,41,32,12,115,95,84,54,63,78,21,10};
//ordenamos el arreglo para que funcione la busquedaBinaria ordenarArreglo(arreglo,tamano); cout << "Elementos del
arreglo: " << endl; mostrarArreglo(arreglo,tamano); cout << "Indique un valor a buscar y se le devolvera el indice: " <<
endl; cin >> clave; cout<< "Su valor se encuentra en arreglo["<<busquedaBinaria(arreglo,tamano,clave)<<"]" << endl;
cout << "Fin del programa :)" << endl; return 0; }//fin de main void mostrarArreglo(const int arreglo[], int tamano) { for
(int i = 0 ; i < tamano ; i++) cout << "arreglo[" << i << "]=" << arreglo[i] << endl; } int busquedaBinaria(const int arreglo[],
int tamano, int clave) { int Iarriba = tamano-1; int Iabajo = 0; int Icentro; while (Iabajo <= Iarriba) { Icentro = (Iarriba +
Iabajo)/2; if (arreglo[Icentro] == clave) return Icentro; else if (clave < arreglo[Icentro]) Iarriba=Icentro-1; else
Iabajo=Icentro+1; } return -1; } void ordenarArreglo(int arreglo[], int tamano) { for (int i = 0; i< tamano -1 ; i++) for (int j =
0; j< tamano -1 ; j++) if (arreglo[j] > arreglo[j+1]) intercambiar(arreglo[j],arreglo[j+1]); } void intercambiar(int &a, int &b)
using std::cout;
using std::cin;
using std::endl;
void //mostrarArreglo
int //busquedaBinaria
void //ordenarArreglo
void intercambiar