En este post vamos a ver distintos métodos y formas de ordenar arreglos o listas en el lenguaje de programación Python.
No vamos a ver cuál es más eficiente, solo vamos a ver los métodos nativos y los métodos manuales, aunque me parece que los métodos nativos (algoritmo Timsort) serán más rápidos y eficientes la mayoría de veces.

Nota: como en otros tutoriales de Python, en este caso me referiré a lista y arreglo como lo mismo.
Ordenar usando sort
La forma más fácil y eficiente de ordenar un arreglo en Python es usando funciones nativas. Comencemos viendo la función sort
. Esta función modifica internamente a la lista, de modo que no debemos esperar el valor de retorno.
La función ordena listas de datos primitivos como enteros, flotantes y cadenas. La sintaxis es:
lista.sort()
Te repito que la función no devuelve nada; ordena internamente al arreglo. Veamos el siguiente ejemplo:
# https://parzibyte.me/blog/
nombres = ["Luis", "María", "Pedro", "Mario", "Leon", "Claire"]
edades = [6, 23, 6, 1, 2, 3, 4]
print("Nombres originalmente: ")
print(nombres)
print("Edades originalmente: ")
print(edades)
# Los ordenamos. sort los ordena internamente, es decir, no regresa nada
nombres.sort()
edades.sort()
print("Nombres ordenados: ")
print(nombres)
print("Edades ordenadas: ")
print(edades)
"""
Salida:
Nombres originalmente:
['Luis', 'María', 'Pedro', 'Mario', 'Leon', 'Claire']
Edades originalmente:
[6, 23, 6, 1, 2, 3, 4]
Nombres ordenados:
['Claire', 'Leon', 'Luis', 'Mario', 'María', 'Pedro']
Edades ordenadas:
[1, 2, 3, 4, 6, 6, 23]
"""
Como se puede observar en la salida, al invocar a sort
tendremos el arreglo ya ordenado. Esto no nos conviene si queremos preservar el original, pero para ello veremos una función a continuación.
Sobre sorted: ordenar y regresar arreglo
Ahora veamos la función sorted
. Esta función igualmente es nativa pero no modifica a la lista; sino que regresa el resultado. Funciona así:
# https://parzibyte.me/blog/
nombres = ["Luis", "María", "Pedro", "Mario", "Leon", "Claire"]
edades = [6, 23, 6, 1, 2, 3, 4]
print("Nombres originalmente: ")
print(nombres)
print("Edades originalmente: ")
print(edades)
# Los ordenamos. sorted los ordena y devuelve
nombres_ordenados = sorted(nombres)
edades_ordenadas = sorted(edades)
print("Nombres ordenados: ")
print(nombres_ordenados)
print("Edades ordenadas: ")
print(edades_ordenadas)
"""
Salida:
Nombres originalmente:
['Luis', 'María', 'Pedro', 'Mario', 'Leon', 'Claire']
Edades originalmente:
[6, 23, 6, 1, 2, 3, 4]
Nombres ordenados:
['Claire', 'Leon', 'Luis', 'Mario', 'María', 'Pedro']
Edades ordenadas:
[1, 2, 3, 4, 6, 6, 23]
"""
El ordenamiento es el mismo, lo que cambia es que esta función no ordena internamente, sino que lo ordena y regresa la copia ordenada.
Otra cosa distinta es que en este caso la función no es invocada a partir del arreglo, sino que se le envía el arreglo a la función.
Orden inverso
Por defecto, la función sorted
y sort
ordenan de manera ascendente; es decir, de menor a mayor ya sea numérica o alfabéticamente. Para invertir el orden podemos pasar la opción reverse
.
Veamos el siguiente ejemplo:
# https://parzibyte.me/blog/
nombres = ["Luis", "María", "Pedro", "Mario", "Leon", "Claire"]
edades = [6, 23, 6, 1, 2, 3, 4]
print("Nombres originalmente: ")
print(nombres)
print("Edades originalmente: ")
print(edades)
# Los ordenamos; uno con sort y otro con sorted para demostrar el orden inverso
nombres_ordenados = sorted(nombres, reverse=True)
edades.sort(reverse=True)
print("Nombres ordenados: ")
print(nombres_ordenados)
print("Edades ordenadas: ")
print(edades)
"""
Salida:
Nombres originalmente:
['Luis', 'María', 'Pedro', 'Mario', 'Leon', 'Claire']
Edades originalmente:
[6, 23, 6, 1, 2, 3, 4]
Nombres ordenados:
['Pedro', 'María', 'Mario', 'Luis', 'Leon', 'Claire']
Edades ordenadas:
[23, 6, 6, 4, 3, 2, 1]
"""
En este caso indicando el argumento reverse
en True
, el arreglo será ordenado de manera inversa, es decir, descendente o de mayor a menor, tanto para strings como para enteros y flotantes.
Otras funciones de ordenamiento
Hasta el momento hemos visto cómo ordenar arreglos usando sort y sorted, ya sea de enteros o cadenas y de manera ascendente o descendente.
Sin embargo la vida real es más compleja así que te dejo otros tutoriales si por ejemplo tu profesor te solicita implementar el algoritmo quicksort, burbuja, merge sort o selección. También puede que quieras ordenar un arreglo complejo, por ejemplo, uno de diccionarios.
Te dejo también más tutoriales de Python.