jueves, 14 de septiembre de 2017

Algoritmo de búsqueda lineal o secuencial en C++

Es el algoritmo de búsqueda más simple, pero el menos eficiente, no requiere que los datos o elementos estén ordenados. Consiste en recorrer los registros o arreglos de manera secuencial, es decir, recorriendo elemento por elemento comparando los datos con la clave de búsqueda hasta que encuentre el dato solicitado o determine que dicho dato no se encuentra. El inconveniente con este algoritmo es que si el arreglo posee unas dimensiones muy grandes si el elemento a buscar está muy lejos tardaría más tiempo en encontrarlo.

Supongamos que, tenemos un arreglo de tamaño de cinco posiciones, la cual contiene los siguientes elementos [2,6,7,4,3] y deseamos buscar el elemento 4 en dicho arreglo. Lo que hace el algoritmo es comenzar desde la primera posición (que puede iniciar con 1 o 0) y comparar la clave de búsqueda -en este caso el 4- con la primera posición, si no lo encuentra entonces continua con la segunda, en caso de que aún no lo encuentre repite el proceso de comparar con los siguientes elementos. Dependiente el tipo de ciclo que se utilice para recorrer el arreglo podemos hacer que se detenga cuando lo encuentre o que continúe comparando los demás elementos por si queremos saber si se repite, pero con la advertencia de que la ejecución tardaría más tiempo en terminal hasta llegar al final.

El algoritmo compararía los elementos del arreglo [2,6,7,4,3] de la siguiente manera:

·         [2,6,7,4,3]
·         ¿2==4?
·         No
·         [2,6,7,4,3]
·         ¿6==4?
·         No
·         [2,6,7,4,3]
·         ¿7==4?
·         No
·         [2,6,7,4,3]
·         ¿4==4?
·         Si
·         ¡Elemento encontrado!

Ejemplo en C++

//Librerias
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
     //Declarando variables.
     int clave, encontrado, n, i, j;
     //Pedir tamaño del arreglo.
     cout << "Ingrese dimensión del arreglo: ";
     cin >> n;
Cout<<endl;
     //Crear la variable para el arreglo dinámico.
     int* arreglo = new int[n];
     //LLenar el arreglo.
     for (i = 0;i < n;i++)
     {
          cout << "Ingrese dato [" << i << "]: ";
          cin >> arreglo[i];
     }
     //Pedir dato o clave a buscar.
     cout << "Ingrese dato que desea buscar: " << endl;
     cin >> clave;
     //Declarar variable de éxito de búsqueda.
     encontrado = 0;
     //Buscar clave o dato en el arreglo.
     for (j = 0;j < n;j++)
     {
//Si el elemento de la posición actual del arreglo es similar a la clave de búsqueda, despliega mensaje de encontrado.
          if (arreglo[j] == clave)
          {
cout << "Se encontro el " << clave << " en la posicion [" << j << "]" << endl;
               encontrado = 1;
          }
     }
     //Libera arreglo dinámico en memoria.
     delete[] arreglo;
//Si no se encontró la clave despliega el mensaje de no encontrado.
     if (encontrado != 1)
          cout << "No se encontro el dato" << endl;
     system("pause");
     return 0;
}

No hay comentarios:

Publicar un comentario