Heap sort en C: ejercicio resuelto con max-heap

Heap sort en C: ejercicio resuelto con max-heap

Este ejercicio está programado para publicación diaria y mantiene la misma estructura didáctica del resto del sitio: enunciado claro, código compilable y salida esperada.

Enunciado

Implementa un caso práctico del tema y valida el resultado por consola.

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
#include <stdio.h>

void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; }

void heapify(int a[], int n, int i) {
    int mayor = i, izq = 2 * i + 1, der = 2 * i + 2;
    if (izq < n && a[izq] > a[mayor]) mayor = izq;
    if (der < n && a[der] > a[mayor]) mayor = der;
    if (mayor != i) {
        swap(&a[i], &a[mayor]);
        heapify(a, n, mayor);
    }
}

void heap_sort(int a[], int n) {
    for (int i = n / 2 - 1; i >= 0; i--) heapify(a, n, i);
    for (int i = n - 1; i > 0; i--) {
        swap(&a[0], &a[i]);
        heapify(a, i, 0);
    }
}

int main(void) {
    int v[] = {4, 10, 3, 5, 1};
    int n = (int)(sizeof(v) / sizeof(v[0]));
    heap_sort(v, n);
    for (int i = 0; i < n; i++) printf("%d ", v[i]);
    printf("\n");
    return 0;
}

Resultado esperado

1
1 3 4 5 10

Errores frecuentes

  • No validar entradas o retornos de funciones estándar.
  • No controlar casos borde (buffers, límites, punteros nulos).
  • Omitir comprobaciones básicas de compilación y ejecución.

Aplicación práctica

Heap sort garantiza O(n log n) en el peor caso y no necesita memoria extra, por lo que se usa cuando hay restricciones de espacio.

Siguiente ejercicio recomendado

Práctica guiada y libro completo

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

FAQ

¿Este ejercicio sirve para entrevistas y exámenes de C?

Sí. Trabaja patrones que aparecen mucho en prácticas, entrevistas técnicas y evaluaciones de programación en C.

¿Dónde seguir con más ejercicios resueltos de C?

En Programación en C en 100 ejercicios resueltos y en Ejercicios C. Kindle Unlimited: Ver en Amazon.

¿Cómo practicar este tipo de ejercicio para mejorar más rápido?

Empieza con entradas pequeñas, prueba casos límite (vacío, un elemento y capacidad máxima) y luego reescribe la solución sin copiarla.