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.
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.
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.
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.
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.
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.