Búsqueda lineal en C: ejercicio resuelto en arrays no ordenados

Búsqueda lineal en C: ejercicio resuelto paso a paso

Si buscas un ejercicio de búsqueda lineal en C resuelto, aquí tienes la implementación completa con retorno del índice y el caso de elemento no encontrado.

La búsqueda lineal (o secuencial) recorre el array elemento por elemento hasta encontrar el valor buscado o llegar al final. Es el algoritmo de búsqueda más simple y el único que funciona en arrays no ordenados.

Enunciado

  1. Implementa busqueda_lineal que recibe un array, su tamaño y un valor objetivo, y devuelve el índice de la primera aparición o -1 si no existe.
  2. Pruébala con una búsqueda exitosa y con un valor que no está en el array.
  3. Implementa también busqueda_lineal_todas que devuelve todos los índices donde aparece el valor (para elementos repetidos).

Solución en C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>

/* Devuelve el índice de la primera aparición de objetivo, o -1 si no existe */
int busqueda_lineal(const int a[], int n, int objetivo) {
    for (int i = 0; i < n; i++) {
        if (a[i] == objetivo) {
            return i;
        }
    }
    return -1;
}

/* Imprime todos los índices donde aparece objetivo */
void busqueda_lineal_todas(const int a[], int n, int objetivo) {
    int encontrado = 0;
    for (int i = 0; i < n; i++) {
        if (a[i] == objetivo) {
            printf("  Encontrado en indice %d\n", i);
            encontrado = 1;
        }
    }
    if (!encontrado) {
        printf("  No encontrado\n");
    }
}

int main(void) {
    int datos[] = { 7, 3, 9, 3, 1, 5, 3, 8 };
    int n = (int)(sizeof(datos) / sizeof(datos[0]));

    /* Búsqueda exitosa */
    int idx = busqueda_lineal(datos, n, 5);
    printf("Buscar 5: indice %d\n", idx);

    /* Búsqueda fallida */
    idx = busqueda_lineal(datos, n, 42);
    printf("Buscar 42: indice %d (no encontrado)\n", idx);

    /* Todas las ocurrencias de 3 */
    printf("Todas las posiciones de 3:\n");
    busqueda_lineal_todas(datos, n, 3);

    return 0;
}

Resultado esperado

1
2
3
4
5
6
Buscar 5: indice 5
Buscar 42: indice -1 (no encontrado)
Todas las posiciones de 3:
  Encontrado en indice 1
  Encontrado en indice 3
  Encontrado en indice 6

Complejidad

CasoComparacionesComplejidad
Mejor caso (primer elemento)1O(1)
Caso promedion/2O(n)
Peor caso (último o no existe)nO(n)

Búsqueda lineal vs búsqueda binaria

CaracterísticaLinealBinaria
Requiere array ordenadoNo
ComplejidadO(n)O(log n)
ImplementaciónMuy simpleModerada
Mejor paraArrays pequeños o no ordenadosArrays grandes ya ordenados

Errores frecuentes

  • Devolver 0 en lugar de -1 cuando no se encuentra: 0 es el índice válido del primer elemento.
  • Usar >= en lugar de > en la condición del bucle y acceder fuera del array.
  • Continuar el bucle tras encontrar el elemento cuando solo se quiere la primera aparición.

Aplicación práctica

La búsqueda lineal se usa cuando:

  • el array no está ordenado y no vale la pena ordenarlo,
  • el array es pequeño (< ~100 elementos) y la diferencia de rendimiento es irrelevante,
  • se buscan todas las ocurrencias de un valor, no solo la primera.

Siguiente ejercicio recomendado

Práctica guiada y siguiente paso

Si quieres una ruta completa con progresión real de dificultad:

FAQ

¿Cuándo es mejor la búsqueda lineal que la binaria?

Cuando el array no está ordenado. Ordenarlo primero costaría O(n log n), lo que solo compensa si vas a hacer muchas búsquedas posteriores.

¿La búsqueda lineal puede buscar en arrays de strings?

Sí, pero hay que usar strcmp en lugar de ==: if (strcmp(a[i], objetivo) == 0).

¿Existe una función estándar de búsqueda lineal en C?

No directamente. bsearch de <stdlib.h> hace búsqueda binaria (requiere array ordenado). Para búsqueda lineal hay que implementarla manualmente.