La búsqueda lineal en C y C++
En esta lección vas a encontrar la posición de un valor en un arreglo sin ordenar con el algoritmo de búsqueda lineal.
Introducción
La búsqueda lineal revisa los elementos uno a uno desde el principio del arreglo, hasta encontrar el valor buscado o llegar al final. Es el algoritmo de búsqueda más sencillo y funciona aunque los datos no estén ordenados.
Puntos importantes
- Prueba con una entrada vacía, un solo elemento, valores repetidos y datos ya ordenados.
- Primero haz que el código sea correcto y después optimízalo.
- En código real, usa preferentemente las funciones ya hechas de la biblioteca estándar.
Visualizador de La búsqueda lineal en C y C++
O(n)Usa Reproducir o Paso para seguir cada comparación y movimiento de datos.
Ejemplos de código C y C++
#include <stdio.h>
int find(const int *values, int size, int target) {
for (int index = 0; index < size; ++index) {
if (values[index] == target) return index;
}
return -1;
}
int main(void) {
int values[] = {14, 3, 27, 8, 19};
printf("index=%d\n", find(values, 5, 8));
}
index=3
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector values{14, 3, 27, 8, 19};
auto match = std::find(values.begin(), values.end(), 8);
std::cout << "index="
<< std::distance(values.begin(), match) << '\n';
}
index=3
Comparación entre C y C++
Las dos versiones tienen una complejidad de O(n) en el peor caso. La función find en C devuelve un índice de tipo int con signo, así que puede usar -1 para indicar que no ha encontrado el valor. La versión de C++ usa std::find, que devuelve un iterador: si es igual a values.end(), el valor no está en el arreglo.
Los bucles, los punteros, las longitudes y los búferes temporales se escriben de forma explícita.
Los iteradores y los algoritmos estándar separan el procesamiento de la forma en que se guardan los datos.
Ejercicios de práctica
Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.
- Sigue cada comparación en papel.
- Prueba con valores repetidos y con valores muy grandes y muy pequeños.
- Mide el tiempo de ejecución de tu código y compáralo con la biblioteca estándar.
Practica con un reto
Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.
Todos los retos