Estas recomendaciones ayudan a escribir código de ordenamiento claro y confiable. Aplica los puntos de esta lista en todos los algoritmos del tutorial.
Antes de ordenar, verifica que n sea positivo y no supere la capacidad del buffer. Evita iterar si n es 0 o 1 para ahorrar pasos. Si lees desde entrada estándar, controla el retorno de scanf y muestra mensajes claros.
Separa utilidades compartidas (swap, impresión, copia de arrays) en sus propios archivos. Esto reduce duplicación y facilita pruebas unitarias aisladas.
Usa nombres claros: bubble_sort, insertion_sort, selection_sort. En variables temporales, evita letras sueltas si pueden confundir.
Revisa índices en bucles. En Bubble e Insertion, el límite superior suele ser n - 1; en Selection, el interno arranca en i + 1. Si usas valores ingresados por el usuario, valida antes.
Comentarios breves ayudan a futuros lectores. Deja notas en variables clave como el límite del recorrido o el flag de corte temprano. Evita comentar lo obvio.
Coloca breakpoints en los bucles internos y usa Watch para seguir los índices y los valores que se comparan. Con Step Over puedes avanzar sin entrar en funciones auxiliares y con Step Into revisar swap cuando sospeches problemas.
Ejecuta siempre con entradas especiales: array vacío, un solo elemento, lista ya ordenada, lista inversa y lista con valores repetidos. Estos casos detectan accesos fuera de rango y problemas de estabilidad.
Si usas números aleatorios, permite fijar una semilla para reproducir fallos. Imprime la semilla usada al inicio y conserva el array original para comparar resultados entre algoritmos.
En pruebas, muestra solo lo necesario. Para arrays grandes, imprime la longitud y los primeros/últimos elementos. Si cuentas comparaciones o swaps, separa la salida de datos de la de métricas para evitar confusión.
Aplica un formato consistente antes de compartir código. Mantén nombres de archivos en minúsculas con guiones bajos y evita mezclar responsabilidades en un mismo archivo.
Genera casos pequeños y repetibles (por ejemplo, inicializando srand(0) durante las pruebas) para comparar salidas entre algoritmos. Valida con arrays especiales: todos iguales, inverso, ya ordenado y con duplicados.
Evita escribir fuera de los límites del buffer de trabajo, especialmente si el tamaño proviene de la entrada. Prefiere constantes o macros para delimitar el tamaño máximo y reusa funciones de copia que ya validan los rangos.
Cuando midas tiempos, repite varias veces y promedia para evitar lecturas sesgadas. Si necesitas depurar, imprime sólo secciones relevantes del array (primeros y últimos elementos) para no saturar la consola.
Mantén un set pequeño de arrays de prueba: ordenado, inverso, con duplicados y casi ordenado. Reutiliza esos datos para validar cambios rápidos y detectar regresiones.
Cuando compares algoritmos, toma notas de tiempos y conteos de swaps/comparaciones. Una tabla pequeña en comentarios o en un README agiliza repetir las pruebas si ajustas el código.
Si lees desde stdin, controla la validez de la entrada y agrega mensajes claros. Evita continuar si el tamaño no es válido o la opción del menú no existe.
Incluye arrays vacíos, de un elemento, ya ordenados, inversos y con duplicados. Estos casos borde exponen errores de límites y estabilidad.
Si la estabilidad importa, verifica que elementos iguales mantengan su orden relativo. Bubble e Insertion son estables; Selection no lo es.
j y i en Insertion, provocando sobrescrituras.