Сортировка пузырьком.


Нужно написать программу, которая сортирует список методом "Cортировки пузырьком".



Время выполнения алгоритма: O(n^2).

"""СОРТИРОВКА ПУЗЫРЬКОМ."""
import time, sys


def check(a):
    test = True                                             # создание флага 
    for i in range(len(a) - 1):                             # в цикле проверим, отсортирован ли список
        if a[i] <= a[i + 1]:
            test = False
        else:
            test = True            
            break
    return test


# входные данные. Список, который надо отсортировать.
a = [10, 5, 2, 1, 3, 20, 11, 15, 4, 7, 100, 33, 6, 400, 55, 11, 1, 111, 7, 100, 33, 6, 400, 55, 11, 1, 111]

seconds = time.time()
while check(a):
    for i in range(len(a) - 1):                             # в цикле сортируем список пузырьком
        if a[i] > a[i + 1]:
            a[i], a[i + 1] = a[i + 1], a[i]
seconds -= time.time()

print()
print("Вариант №1 (итеративный)", a)
print(f"Время выполнения: {seconds:0.20f}")


############################################################################################################
############################################################################################################
"""ДАЛЕЕ ПРИМЕР, КАК ДЕЛАТЬ НЕ НАДО!!! НЕ НАДО ИСПОЛЬЗОВАТЬ РЕКУРСИЮ.""" 
############################################################################################################
############################################################################################################


def bubble_sorting():    
    global a
    test = False                                            # создание флага для базового случая
    for i in range(len(a) - 1):                             # в цикле проверим, отсортирован ли список, если отсортирован, то это базовый случай
        if a[i] <= a[i + 1]:
            test = True
        else:
            test = False            
            break
    if test == True:
        return None
    else:
        for i in range(len(a) - 1):                         # в цикле сортируем список пузырьком
            if a[i] > a[i + 1]:
                a[i], a[i + 1] = a[i + 1], a[i]
        bubble_sorting()                                    # будем вызывать функцию сортировки до получения результата
        

# входные данные. Список, который надо отсортировать.
a = [10, 5, 2, 1, 3, 20, 11, 15, 4, 7, 100, 33, 6, 400, 55, 11, 1, 111, 7, 100, 33, 6, 400, 55, 11, 1, 111]

seconds = time.time()

# вызов функции сортировки
sys.setrecursionlimit(100_000)                              # установим очень большую глубину рекурсии по-умолчанию 996
bubble_sorting() 

seconds -= time.time()

print("Вариант №2 (рекурсивный)", a, end=" ")
print("Вторым способом делать не надо!!! При увеличении входных данных будет огромная глубина рекурсии.")
print(f"Время выполнения: {seconds:0.20f}")
print()