Sunteți pe pagina 1din 10

BUSQUEDA BINARIA

La bsqueda binaria es el mtodo, donde si el arreglo o vector est bien ordenado, se reduce sucesivamente la operacin eliminando repetidas veces la mitad de la lista restante. El proceso comienza comparando el elemento central del arreglo con el elemento buscado. Si ambos coinciden finaliza la bsqueda. Si no ocurre as, el elemento buscado ser mayor o menor en sentido estricto que el elemento central del arreglo. Si el elemento buscado es mayor se procede a hacer bsqueda binaria en el subrayar superior, si el elemento buscado es menor que el contenido de la casilla central, se debe cambiar el segmento a considerar al segmento que est a la izquierda de tal sitio central. Este mtodo se puede aplicar tanto a datos en listas lineales como en rboles binarios de bsqueda. Los pre requisitos para la bsqueda binaria son: La lista debe estar ordenada, en un orden especifico de acuerdo al valor de la clave. Debe conocerse el nmero de elementos. Si el conjunto de elementos es grande, el tiempo de bsqueda se puede reducir utilizando el siguiente algoritmo de tipo divide y vencers: Se divide el elemento en dos partes. Se determina la parte que debe contener la clave buscada. Se repite el proceso en esa parte. Una forma razonable de dividir el conjunto de elementos es mantener los elementos ordenados y despus utilizar los ndices del arreglo ordenado para determinar la parte del arreglo sobre la que se va a trabajar.

VENTAJAS
Se puede aplicar tanto a datos en listas lineales como en rboles binarios de bsqueda. Es el mtodo ms eficiente para encontrar elementos en un arreglo ordenado.

DESVENTAJA
Este mtodo funciona solamente con arreglos ordenados, por lo cual si nos encontramos con arreglos que no estn en orden, este mtodo, no nos ayudara en nada.

Lo que buscaremos es el N 78
10 12 15 [2] 16

17 [4]

21

25

32 [7]

41 [8]

54

63

78

84

95

115

[0]

[1]

[3]

[5] [6]

[9] [10] [11] [12] [13] [14]

+ 0 + 14 = =7 2 2

Calve (78)> a[7] (12)

41 [8]

54

63

78

84

95

115

[9] [10] [11] [12] [13] [14]

+ 8 + 14 = = 11 2 2

Clave (78) = a[11] (78) (busqueda con xito)

#include <iostream.h> #include <conio.h> using namespace std; void mostrarArreglo(const int[], int); int busquedaBinaria(const int[], int, int); void ordenarArreglo(int[], int); void intercambiar(int&,int&); int main() { int clave =0; const int tam = 15; int arreglo[tam] ={25,17,15,16,41,32,12,115,95,84,54,63,78,2 1,10}; ordenarArreglo(arreglo,tam); cout << "elementos del arreglo:" << endl; mostrarArreglo(arreglo,tam); cout <<"De acuerdo al menu indique su valor para que seabuscando en el arreglo "<<endl; cin >> clave; cout<< "El valor introducido se encuentra en el arreglo

["<<busquedaBinaria(arreglo,tam,clave)<<"]" <<endl; cout << "fin de busqueda :)" <<endl; cout << "desea reaizar otra busqueda? SI=1 NO=2 \n\n"<<endl; system ("pause"); return 0; getch (); } void mostrarArreglo(const int arreglo[], int tam) { for (int i =0; i < tam ; i++) cout <<"arreglo[" << i << "]=" << arreglo[i] << endl; } int busquedaBinaria(const int arreglo[],int tam,int clave) { int Iarriba =tam-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 tam) { for (int i= 0; i<tam-1 ;i++) for (int j = 0;j<tam-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; }

S-ar putea să vă placă și