Antes de escribir MergeSort, QuickSort o HeapSort necesitamos una base común en Python: cómo representar listas, pasar datos entre funciones, reutilizar auxiliares y organizar el proyecto de forma simple.
Usaremos listas de enteros como estructura de entrada. El tamaño lógico se obtiene con len(), evitando mantener contadores manuales:
datos = [42, 7, 18, 3, 25]
cantidad = len(datos) # elementos realmente usados
Esta convención se mantiene en todos los ejemplos para que las funciones conozcan hasta dónde iterar.
En Python pasamos la lista por referencia. Las funciones reciben el rango que deben ordenar:
def mergesort(valores, inicio, fin):
pass
# Llamado
mergesort(datos, 0, cantidad - 1)
En las versiones iterativas (como HeapSort) usaremos firmas del tipo funcion(lista, n). Mantener este contrato simplifica el cambio entre algoritmos.
Intercambiar elementos es esencial en QuickSort y HeapSort. En Python es directo con asignación múltiple:
def swap(valores, i, j):
valores[i], valores[j] = valores[j], valores[i]
Este helper evita repetir la lógica de intercambio en cada algoritmo.
Imprimir el contenido antes y después de ordenar ayuda a validar cambios:
def print_array(valores):
print(valores)
Esta función no modifica los datos y sirve para todas las pruebas del tutorial.
Para este tutorial vamos a reunir los algoritmos en un solo archivo Python. Esto facilita copiar, ejecutar y comparar rápidamente.
# archivo: ordenamientos.py
def swap(valores, i, j):
valores[i], valores[j] = valores[j], valores[i]
def print_array(valores):
print(valores)
def mergesort(valores, inicio, fin):
pass
def quicksort(valores, inicio, fin):
pass
def heapsort(valores):
pass
datos = [42, 7, 18, 3, 25]
print_array(datos)
Con un solo archivo evitamos configuraciones adicionales y podemos enfocarnos en la lógica de cada algoritmo.