2 - Preparación para programar en C

Antes de escribir Bubble, Insertion o Selection Sort necesitamos definir una base común en C: cómo representaremos arrays, qué funciones auxiliares reusaremos y de qué manera organizar el proyecto para compilar rápido.

2.1 Representación de arrays en C

Un array en C es una región contigua de memoria con elementos del mismo tipo. Para esta serie usaremos enteros:

#define MAX 100

int datos[MAX] = {5, 2, 9, 1, 3};
int cantidad = 5; /* cantidad real usada */

El tamaño lógico (cantidad) es clave: los algoritmos necesitan saber hasta dónde iterar, incluso si el buffer es más grande.

2.2 Parámetros de función para arrays

Cuando pasamos un array a una función, decae a un puntero. Por eso siempre acompañamos el puntero con su longitud:

void bubble_sort(int *arr, int n);

/* Llamado */
bubble_sort(datos, cantidad);

Usaremos int para tamaños en este tutorial para mantener la declaración sencilla y consistente con los ejemplos.

2.3 Función auxiliar swap()

Intercambiar dos valores es una operación repetitiva en los tres algoritmos. Centralizarla mantiene el código claro:

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

El prototipo irá en un archivo de cabecera compartido para poder reutilizarlo sin duplicación.

2.4 Impresión de arrays para pruebas

Ver el antes y el después de cada ordenamiento nos ayuda a validar la lógica. Una función ligera de impresión:

#include <stdio.h>

void imprimir_array(const int *arr, int n) {
  printf("[");
  for (int i = 0; i < n; i++) {
    printf("%d", arr[i]);
    if (i + 1 < n) {
      printf(", ");
    }
  }
  printf("]\\n");
}

Esta rutina es in-place: no modifica los datos y sirve para todos los algoritmos del tutorial.

2.5 Proyecto en CLion: archivos .h, .c y main.c

Organizar el proyecto desde el inicio facilita las pruebas en CLion o en cualquier editor:

  • swap.h y swap.c: prototipo y definición de swap.
  • utils.h y utils.c: funciones de impresión y utilidades compartidas.
  • bubble_sort.c, insertion_sort.c, selection_sort.c: implementaciones independientes.
  • main.c: punto de entrada para elegir algoritmo, cargar datos de prueba y mostrar resultados.

Separar cabeceras y código fuente permite compilar sólo lo que cambia y mantener el tutorial modular.