Búsqueda lineal
- Algoritmo de búsqueda lineal
- Ejemplo de búsqueda lineal
- Implementación del algoritmo de búsqueda lineal
- Complejidad del algoritmo de búsqueda lineal
La búsqueda lineal es el algoritmo de búsqueda más simple. También se llama búsqueda secuencial porque, en este algoritmo, buscamos un elemento atravesando toda el array y comparando cada elemento con el elemento deseado para encontrar una coincidencia. Si se encuentra el elemento deseado, se devuelve el índice o ese elemento; de lo contrario, continuamos buscando hasta agotar el array. También podemos buscar múltiples apariciones de un elemento dentro de un array. Se utiliza principalmente para buscar elementos dentro de un array sin clasificar. No se usa prácticamente porque es mucho más lento que la búsqueda binaria.
Algoritmo de búsqueda lineal
Supongamos que tenemos un array sin clasificar A[]
que contiene n
elementos, y queremos encontrar un elemento - X
.
-
Recorre todos los elementos dentro del array comenzando desde el elemento más a la izquierda usando un bucle
for
y haz lo siguiente:- Si el valor de
A[i]
coincide conX
, devuelva el índicei
. (Si puede haber varios elementos que coincidan conX
, en lugar de devolver el índicei
, imprima todo indexa o almacena todos los índices en un array y devuelve ese array). - De lo contrario, pase al siguiente elemento.
- Si está en el último elemento del array, salga del bucle
for
.
- Si el valor de
-
Si ninguno de los elementos coincide, devuelve
-1
.
Ejemplo de búsqueda lineal
Supongamos que tenemos el array: (5, 3, 4, 2, 1, 6)
.
- Caso 1: Queremos buscar
X
=5
.
El primer elemento en sí es una coincidencia y devolvemos el índice 0
. (Mejor caso)
- Caso 2: Queremos buscar
X
=1
.
Atravesamos el array y llegamos al índice 4
para encontrar una coincidencia y devolver ese índice. (Caso promedio)
- Caso 3: Queremos buscar
X
=9
Atravesamos el array pero no encontramos una coincidencia cuando llegamos al último elemento del array. Devolvemos -1
. (Peor de los casos)
Implementación del algoritmo de búsqueda lineal
Algoritmo de búsqueda lineal para una sola coincidencia
#include <iostream>
using namespace std;
int search(int arr[], int n, int x) {
// Traverse the array sequentially
for (int i = 0; i < n; i++) {
if (arr[i] == x) return i;
}
return -1;
}
int main() {
int n = 5;
int arr[] = {2, 4, 0, 1, 9};
int x = 1;
int result = search(arr, n, x);
if (result == -1)
cout << "Element not found";
else
cout << "Element found at index: " << result;
}
Algoritmo de búsqueda lineal para múltiples coincidencias
#include <bits/stdc++.h>
using namespace std;
vector<int> search(int arr[], int n, int x) {
vector<int> ans;
// Traverse the array sequentially
for (int i = 0; i < n; i++) {
if (arr[i] == x) {
ans.push_back(i);
}
}
return ans;
}
int main() {
int n = 9;
int arr[] = {2, 4, 0, 1, 9, 2, 1, 2, 1};
int x = 1;
vector<int> res = search(arr, n, x);
if (res.empty()) {
cout << "Element not found!!";
} else {
cout << "Element found at ";
for (int i = 0; i < res.size(); i++) {
cout << res[i] << " ";
}
}
}
Complejidad del algoritmo de búsqueda lineal
Complejidad del tiempo
- Caso promedio
La complejidad temporal del algoritmo de búsqueda lineal es O(n)
.
- Mejor caso
La complejidad del tiempo en el mejor de los casos es O(1)
. Ocurre cuando el elemento a buscar es el primer elemento presente dentro del array.
- Peor caso
El peor de los casos ocurre cuando el elemento que estamos buscando no está presente dentro del array o está en el último índice del array. La complejidad de tiempo en el peor de los casos es O(n)
.
Complejidad espacial
La complejidad espacial de este algoritmo depende del número de coincidencias y la implementación utilizada. En general, la complejidad del espacio se indica como O(1)
, pero puede ser mayor si se almacenan múltiples índices coincidentes dentro de un array.
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn