22 abril, 2021

PROGRAMAR ALGORITMO DE BURBUJA EN PYTHON CON DATOS DE UN TXT

Hola a todos, de nuevo hoy vuelvo con Python y con el famoso algoritmo de ordenación de Burbuja (Bubble Sort Algorithm).

En Excel Signum ya había publicado varias entradas sobre este tema:

Y ahora me parecía interesante realizar la programación en Python.

Como es obvio, el algoritmo ya está inventado así como sus mejoras para hacer mayor su rendimiento pero creo que es importante mostrar cómo se comporta y un ejemplo práctico y completo desde el inicio hasta el final, por lo que voy a plantear los datos de inicio como una columna de 1.000 números en txt que debemos importar y ordenar en Python para luego exportar a un archivo de Excel.

Veamos el archivo txt:

Lo he nombrado como ENTRADA.txt y son una serie de 1.000 números aleatorios del 1 a 100.000. Nuestros trabajo será importarlos, luego ordenarlos con el algoritmo y exportarlos al archivo de Excel denominado SALIDA.xslx

Para realizar todo este trabajo vamos a utilizar el siguiente código:

#Creamos el algoritmo que posteriormente invocaremos
def Ordenamiento(MiArray):
    #Variable control comprobaciones innecesarias
    Control_ant = 0
    #Variable control lista está ordenada
    Control_ord = 1
    while (Control_ord):
        Control_ord = 0
        #Comenzamos a procedimiento de ordenación
        for i in range(len(MiArray) - Control_ant - 1):
            if MiArray[i] > MiArray[i+1]: 
                MiArray[i], MiArray[i+1] = MiArray[i+1], MiArray[i]
                Control_ord = 1
        Control_ant += 1

#Cargamos columna de archivo TXT y la pasamos a una lista
import pandas as pd
df = pd.read_csv(r'C:\Users\USUARIO\OneDrive\Documents-Segu\ALGORITMO_BURBUJA\ENTRADA.txt', header=None, delimiter=r"\s+")
MiArray = df.iloc[:, 0].tolist()

#ejecutamos algoritmo con la lista generada
import xlsxwriter
row=0
column=0  
workbook = xlsxwriter.Workbook(r'C:\Users\USUARIO\OneDrive\Documents-Segu\ALGORITMO_BURBUJA\SALIDA.xlsx')
worksheet = workbook.add_worksheet("Hoja1")
#Llamamos al algoritmo con la lista generada con el TXT
Ordenamiento(MiArray)  
for i in range(len(MiArray)):
    #Pasamos el resutlado al Excel 
    worksheet.write(row, column, MiArray[i])
    row += 1
    print (MiArray[i]), 
workbook.close()
        

y ahora pasamos a comentarlos por partes. La importación del txt se puede hacer de muchas formas, para este caso lo voy a realizar con la librería Pandas de Python por la sencillez y porque me permitirá pasar los datos de la columna del txt a una lista. En este caso la columna 0, (la primera) es la que vamos a convertir.

#Cargamos columna de archivo TXT y la pasamos a una lista
import pandas as pd
df = pd.read_csv(r'C:\Users\USUARIO\OneDrive\Documents-Segu\ALGORITMO_BURBUJA\ENTRADA.txt', header=None, delimiter=r"\s+")
MiArray = df.iloc[:, 0].tolist()

Con los datos formateados ya como una lista, podemos llamar la función "Ordenamiento" a la que pasamos el resultado de la lista que hemos generado. En este ejemplo y como deseo exportar a excel utilizaré el módulo de XlsxWriter:

#ejecutamos algoritmo con la lista generada
import xlsxwriter
row=0
column=0  
workbook = xlsxwriter.Workbook(r'C:\Users\USUARIO\OneDrive\Documents-Segu\ALGORITMO_BURBUJA\SALIDA.xlsx')
worksheet = workbook.add_worksheet("Hoja1")
#Llamamos al algoritmo con la lista generada con el TXT
Ordenamiento(MiArray)  
for i in range(len(MiArray)):
    #Pasamos el resultado al Excel 
    worksheet.write(row, column, MiArray[i])
    row += 1
    print (MiArray[i]), 
workbook.close()

y finalmente y lo más importante, el algoritmo de ordenación:

#Creamos el algoritmo que posteriormente invocaremos
def Ordenamiento(MiArray):
    #Variable control comprobaciones innecesarias
    Control_ant = 0
    #Variable control lista está ordenada
    Control_ord = 1
    while (Control_ord):
        Control_ord = 0
        #Comenzamos a procedimiento de ordenación
        for i in range(len(MiArray) - Control_ant - 1):
            if MiArray[i] > MiArray[i+1]: 
                MiArray[i], MiArray[i+1] = MiArray[i+1], MiArray[i]
                Control_ord = 1
        Control_ant += 1

Una vez ejecutado el algoritmo tendremos el siguiente archivo de SALIDA de excel:

En caso de que deséis obtener la ordenación a la inversa, de mayor a menor, solo tenéis que cambiar el signo > por < en el algoritmo:

if MiArray[i] < MiArray[i+1]:

Y esto es todo, espero que os sea de utilidad y en caso de querer profundizar en el tema tenéis abundantes ejemplos en internet a los que podéis acudir.

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies