This project simulates an optimization problem under constraints, where I designed a custom algorithm in C to sort data using the smallest number of operations possible.
It helped me understand the impact of algorithmic efficiency in real-world scenarios such as:
- Logistics
- Process automation
- Large-scale data handling
The push_swap program receives a list of unsorted integers as arguments and must print to standard output the smallest possible list of instructions to sort those numbers using two stacks (a and b) and a limited set of operations:
sa,sb,ss– swapspa,pb– pushesra,rb,rr– rotatesrra,rrb,rrr– reverse rotates
| Input size | Algorithm |
|---|---|
| 2 elements | Direct swap |
| 3 elements | Minimal case handling (sort_3) |
| 4–10 elements | Minimum value extraction strategy |
| >10 elements | Chunk-based algorithm (ksort) with indexed stack values |
The project has been tested with:
- 42's Deepthought
checker_linuxto verify sorted stacks- Custom shell testers
push_swap_visualizerto visually track each operation
To visualize the sorting process step by step, you can use this graphical tester made by another 42 student:
🔗 https://github.com/o-reo/push_swap_visualizer
-----SPANISH-----
Este proyecto simula un problema de optimización bajo restricciones, donde diseñé un algoritmo personalizado en C para ordenar datos con el menor número de operaciones posible.
Me ayudó a comprender el impacto de la eficiencia algorítmica en escenarios reales como:
- Logística
- Automatización de procesos
- Manejo de grandes volúmenes de datos
El programa push_swap recibe como argumentos una lista de enteros desordenados y debe imprimir en salida estándar una lista de instrucciones que ordenen esos números usando dos stacks (a y b) y un conjunto limitado de operaciones:
sa,sb,ss– swapspa,pb– pushesra,rb,rr– rotatesrra,rrb,rrr– reverse rotates
| Tamaño del input | Algoritmo |
|---|---|
| 2 elementos | Swap directo |
| 3 elementos | Algoritmo mínimo (sort_3) |
| 4–10 elementos | Extracción de mínimos |
| >10 elementos | Algoritmo por chunks (ksort) con indexación optimizada |
El proyecto ha sido probado con:
- Deepthought de 42
checker_linuxpara verificar que los stacks quedan ordenados- Testers personalizados
push_swap_visualizerpara ver el proceso gráficamente
Para ver cómo se ordenan los números paso a paso, puedes usar este visualizador gráfico hecho por otro estudiante:
🔗 https://github.com/o-reo/push_swap_visualizer
