Busqueda lineal y busqueda binaria

3
Busqueda lineal y Busqueda binaria. La búsqueda lineal probablemente es sencilla de implementar e intuitiva. Básicamente consiste en buscar de manera secuencial un elemento, es decir, preguntar si el elemento buscado es igual al primero, segundo, tercero y así sucesivamente hasta encontrar el deseado. La búsqueda binaria consiste en la siguiente idea: se va 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 siguien 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 Icentro = 4. 3. Evaluamos si vector[Icentro] es igual a la clave de busqueda, si es igual ya encontramos la clave y devolvemos Icentro. 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). #include <iostream> #include <stdlib.h> #include "quicksort.cpp" using namespace std; int lineal_search(int *array, int searched, int arraySize) { for (int i = 0; i< arraySize; i++) { if (searched == array[i]) { cout << "Se encuentra en la posicion " << i + 1 << endl;

Transcript of Busqueda lineal y busqueda binaria

Page 1: Busqueda lineal y busqueda binaria

Busqueda lineal y Busqueda binaria.

La búsqueda lineal probablemente es sencilla de implementar e intuitiva. Básicamente consiste en buscar de manera secuencial un elemento, es decir, preguntar si el elemento buscado es igual al primero, segundo, tercero y así sucesivamente hasta encontrar el deseado.

La búsqueda binaria consiste en la siguiente idea: se va 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 siguien 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 Icentro = 4.

3. Evaluamos si vector[Icentro] es igual a la clave de busqueda, si es igual ya encontramos la clave y devolvemos Icentro.

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).

#include <iostream>#include <stdlib.h>#include "quicksort.cpp" using namespace std; int lineal_search(int *array, int searched, int arraySize){    for (int i = 0; i< arraySize; i++) {        if (searched == array[i]) {            cout << "Se encuentra en la posicion " << i + 1 << endl;        }   }} int binary_search(int *array, int searched, int arraySize){    int first = 0;    int middle;    int last = arraySize - 1;

Page 2: Busqueda lineal y busqueda binaria

     while (first <= last) {        middle = (first + last) / 2;         if (searched == array[middle]) {            cout << "Se encuentra en la posición " << middle + 1 << endl;            return array[middle];        } else {            if (array[middle] > searched) {                last = middle - 1;            } else {                first = middle + 1;            }        }    }    return -1;} void print(int *array, int arraySize){   for (int i = 0; i < arraySize; i++) {        cout << array[i] << "  ";   }   cout << endl << endl;} int main(){    int arraySize;    int searched;    cout << "Ingresa el tamanyo del array" << endl;    cin >> arraySize;     int array[arraySize];     srand(time(NULL));    for (int i = 0; i < arraySize; i++) {        array[i] = rand() % 100;    }     cout << endl;    cout << "Array al inicio: " << endl;    print(array, arraySize);     cout << "Busqueda lineal -> Ingresa el elemento a buscar: ";    cin >> searched;    lineal_search(array, searched, arraySize);     cout << "Array ordenado: " << endl;    quicksort(array, 0, arraySize);    print(array, arraySize);     cout << "Busqueda binaria -> Ingresa el elemento a buscar: ";    cin >> searched;    binary_search(array, searched, arraySize);}