Sei sulla pagina 1di 3

MATERIA: PRORAMACION ORIENTADA A OBJETO

MTRA: YOLANDA NAVARRETE


ALUMNA: MARIA RUBI JIMENEZ LOPEZ
GRUPO: 410
ESPECIALIDAD: INFORMATICA
Búsqueda binaria

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

1. Se determinan un indice arriba y un indice abajo, Iarriba=0 e Iabajo=9 respectivamente.

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)

{ int tmp = b; b = a; a = tmp; }


#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

Potrebbero piacerti anche