Алгоритм пузырьковой сортировки в PrettyTable

Нужно отсортировать фамилии в алфавитном порядке, обязательно методом пузырьковой сортировки.

Код:

from prettytable import PrettyTable, HEADER

def Load():
    with open ('Workers.txt', encoding='utf-8') as file:
        v = list(file.read().splitlines())

        d=int(v[0])

        for i in range(len(v)):
            if i == 0:
                continue

        #Фамилии
            elif i % 2 == 1:
                sd_name = ''
                sd_name += v[i]
                sd_name += '                                '

        #Числа
            elif i % 2 == 0:
                z = v[i]
                x = int(z[0] + z[1])
                y = float(z[3] + z[4] + z[5] + z[6])

                itogo=''
                itogo+=str(x*y)

                days=''
                days+=str(x)

                oklad=''
                oklad+=str(y)


                zrplt = round(((x * y) / d), 2)

                summa.append(zrplt)

                Save(zrplt, sd_name, days, oklad)

summa=[]

t = PrettyTable()
t.field_names = ["                Фамилия", "Дни", "  Оклад   ", " Зарплата "]


def Save(zrplt,sd_name,days,oklad):
    with open('Pay.txt', 'w', encoding='utf-8') as f:

        t.add_rows(
            [
                [sd_name,days,oklad,zrplt]

            ]
        )

        t.align["                Фамилия"] = 'l'
        t.align["Дни"] = 'r'
        t.align["  Оклад   "] = 'r'
        t.align[" Зарплата "] = 'r'

        f.write(str(t))
        print(t)

Load()
it=sum(summa)

with open('Pay.txt', 'a', encoding='utf-8') as f:
    f.write('\n')

with open('Pay.txt', 'a', encoding='utf-8') as f:
    k=PrettyTable()
    k.hrules=HEADER
    k.vrules=False

    k.field_names=['Итого                                                       | ', it]

    k.align['Итого                                                         '] = 'l'
    k.align[it] = 'r'


    f.write(str(k))
    print(k)

Workers: 24 Петров 15 6300 Иванов 24 5600 Сидоров 19 4350 Николаев 15 4800 Малышев 21 4350 Соколов 12 7800


Ответы (1 шт):

Автор решения: greymaster

Сортировка пузырьком, и для текста, и для чисел

def p_sort(a):
    n = len(a)
    for i in range(n - 1):
        for j in range(n - 1 - i):
            if a[j] > a[j + 1]:
                a[j], a[j + 1] = a[j + 1], a[j]
    return a


name = [("Петров", 13, 5400), ("Соколов", 12, 6400), ("Александров", 11, 5500), ("Алексеев", 11, 5400),
        ("Иванов", 15, 5600), ("Петров", 12, 5400), ("Петров", 12, 5300)]

print(p_sort(name))

выводит:

[('Александров', 11, 5500), ('Алексеев', 11, 5400), ('Иванов', 15, 5600), ('Петров', 12, 5300), ('Петров', 12, 5400), ('Петров', 13, 5400), ('Соколов', 12, 6400)]

→ Ссылка