python

Python: ordenamiento por selección

En este post de programación en Python veremos cómo ordenar un arreglo, array o lista usando el algoritmo de selección, ordenamiento por selección o como le llames.

Ordenar arreglo usando método de selección en Python

Este algoritmo para ordenar arreglos en Python es más rápido que el método de la burbuja, pues realiza menos recorridos.

Te mostraré cómo implementar este algoritmo para hacer un ordenamiento ascendente y descendente con ejemplos para listas de cadenas y números.

Nota: voy a usar arreglo, array y lista como sinónimos.

El algoritmo

Vamos a usar dos ciclos. El primero va desde 0 hasta la longitud del arreglo menos dos (cada paso del ciclo estará en una variable que llamaremos i).

Ahora, dentro de ese ciclo, hacemos otro ciclo que va desde i + 1 hasta la longitud del arreglo menos uno. Guardaremos el paso del ciclo en j.

Finalmente dentro de esos dos ciclos hacemos la comparación del arreglo en i con el arreglo en j y en caso de que se cumpla, intercambiamos los valores.

En cuanto al orden: si queremos un orden ascendente, comparamos si lista[i] es mayor que lista[j]. Y si queremos un orden descendente, comparamos si lista[i] es menor que lista[j].

Ordenamiento por selección en Python

Ahora que hemos explicado el algoritmo, veamos la función del ordenamiento por selección en Python. En este caso vamos a recibir una lista y la ordenaremos internamente, así que el método no regresará nada.

def seleccion(arreglo):
    longitud = len(arreglo)
    for i in range(longitud-1):
        for j in range(i+1, longitud):
            if arreglo[i] > arreglo[j]:
                # Intercambiar
                arreglo[i], arreglo[j] = arreglo[j], arreglo[i]

Primero calculamos la longitud con len, luego hacemos el primer ciclo en la línea 3. En este caso range siempre iterará hasta el límite menos uno, por ello es que no estoy restando 2 a la longitud, solo le estoy restando 1.

Finalmente el intercambio se produce en la línea 7. En este caso la lista quedará ordenada de manera ascendente, es decir, de menor a mayor.

Orden descendente

La función es casi igual; únicamente cambia el signo de comparación, quedando así:

def seleccion_descendente(arreglo):
    longitud = len(arreglo)
    for i in range(longitud-1):
        for j in range(i+1, longitud):
            if arreglo[i] < arreglo[j]:
                # Intercambiar
                arreglo[i], arreglo[j] = arreglo[j], arreglo[i]

Orden por selección en cadenas y números

Podemos ordenar arreglos de cualquier tipo (incluso de objetos, si implementamos a __eq__ correctamente). Aquí te muestro algunos ejemplos del ordenamiento por selección en Python, en el primer caso es un arreglo de enteros y en el segundo es un array de cadenas:

numeros = [23, 25, 30, 1, 28, 11, 96, 2, 3, 1]
print("Arreglo de números original:")
print(numeros)
seleccion(numeros)
print("Arreglo de números ordenado: ")
print(numeros)
seleccion_descendente(numeros)
print("Arreglo de números ordenado descendente: ")
print(numeros)
cadenas = ["Luis", "Link", "Mario", "Aloy", "Claire",
           "Leon", "Zelda", "María", "King K. Rool"]
print("Arreglo de cadenas original:")
print(cadenas)
seleccion(cadenas)
print("Arreglo de cadenas ordenado: ")
print(cadenas)
seleccion_descendente(cadenas)
print("Arreglo de cadenas ordenado descendente: ")
print(cadenas)

Poniendo todo junto

El código completo junto con la definición de los métodos y la prueba del orden queda así:

"""
    https://parzibyte.me/blog
"""


def seleccion(arreglo):
    longitud = len(arreglo)
    for i in range(longitud-1):
        for j in range(i+1, longitud):
            if arreglo[i] > arreglo[j]:
                # Intercambiar
                arreglo[i], arreglo[j] = arreglo[j], arreglo[i]


def seleccion_descendente(arreglo):
    longitud = len(arreglo)
    for i in range(longitud-1):
        for j in range(i+1, longitud):
            if arreglo[i] < arreglo[j]:
                # Intercambiar
                arreglo[i], arreglo[j] = arreglo[j], arreglo[i]


numeros = [23, 25, 30, 1, 28, 11, 96, 2, 3, 1]
print("Arreglo de números original:")
print(numeros)
seleccion(numeros)
print("Arreglo de números ordenado: ")
print(numeros)
seleccion_descendente(numeros)
print("Arreglo de números ordenado descendente: ")
print(numeros)
cadenas = ["Luis", "Link", "Mario", "Aloy", "Claire",
           "Leon", "Zelda", "María", "King K. Rool"]
print("Arreglo de cadenas original:")
print(cadenas)
seleccion(cadenas)
print("Arreglo de cadenas ordenado: ")
print(cadenas)
seleccion_descendente(cadenas)
print("Arreglo de cadenas ordenado descendente: ")
print(cadenas)

Si quieres puedes leer más sobre Python en mi blog. Por cierto, ya he implementado el quicksort, método de la burbuja y otros usando Python.

 

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

3 días hace

Esta web usa cookies.