Академический Документы
Профессиональный Документы
Культура Документы
Si no es as. Preguntamos si el elemento que se encuentra en la posicin medio es mayor al elemento buscado, si es afirmativo y como el array est ordenado, quiere decir que elemento buscado es menor al del medio. Entonces ahora solo buscaramos en esa divisin del array, por lo tanto, el fin ahora sera el elemento anterior al medio.
De lo contrario quiere decir que elemento buscado es mayor al del medio, entonces debemos buscar en la otra divisin del array, por lo tanto el inicio sera el elemento posterior al medio.
else { inicio = medio + 1; }
Con cualquiera de estas 2 operaciones descartamos la otra mitad del array y por lo tanto reducimos notablemente el nmero de iteraciones. Por lo tanto, en cada iteracin, la bsqueda se reduce a la mitad del array. Realizamos esto en un bucle mientras el inicio sea menor o igual al fin. El algoritmo de bsqueda binaria tiene una complejidad de O(log n). Veamos la implementacin de la bsqueda lineal y binaria en C++. Nota: Para realizar la bsqueda binaria, estoy incluyendo el archivo que contiene el algoritmo de ordenamiento quicksort, para no volver a escribirlo y as reutilizar cdigo. #include quicksort.h Aqu tienen el cdigo del algoritmo y una breve explicacin. Retiren el main para utilizarlo en otros programas.
#include <iostream> #include "quicksort.h" using namespace std; int busqueda_lineal(int *array,int buscado,int tam) { for(int i=0;i<tam;i++){ if(buscado==array[i]){ cout << "Se encuentra en la posicion " << i+1 << endl; } } } int busqueda_binaria(int *array, int buscado, int tam) { int medio, inicio, fin; inicio = 0; fin = tam-1; while(inicio <= fin){ medio = (inicio + fin) / 2; if(buscado == array[medio]){ cout << "Se encuentra en la posicion " << medio + 1 << endl; return array[medio]; } else{ if(array[medio] > buscado){
fin = medio - 1; } else { inicio = medio + 1; } } } return -1; } void imprimir(int *array,int tam) { for(int i=0;i<tam;i++){ cout << array[i] << " "; } cout << endl << endl; } int main() { int tam; int buscado; cout << "Ingresa el tamanyo del array" << endl; cin >> tam; int array[tam]; srand(time(NULL)); for(int i=0;i<tam;i++){ array[i] = rand() % 100; } cout << endl; cout << "Array al inicio " << endl; imprimir(array,tam); cout << "Ingresa el elemento a buscar (Busqueda lineal) "; cin >>buscado; busqueda_lineal(array,buscado,tam); cout << "Array ordenado " << endl; quicksort(array,0,tam); imprimir(array,tam); cout << "Ingresa el elemento a buscar (Busqueda binaria) "; cin >>buscado; busqueda_binaria(array,buscado,tam); return 0; }
Ingresa el elemento a buscar (Busqueda lineal) 36 El elemento se encuentra en la posicion 6 Array ordenado
17
17
21
22
26
31
36
37
44
47
53
57
89
97