Рубріки: Теория

Bubble sort в Python: что такое сортировка пузырьком

Ольга Змерзла

Алгоритм сортировки пузырьком позволяет упорядочить и отсортировать набор чисел в порядке возрастания. Почему же метод так называется?

В процессе его работы происходит попарное сравнение соседних элементов списка. Если первый элемент больше второго, то они меняются местами. Чтобы избежать сбоя или ошибки, осуществляется несколько таких проходов со сравнением элементов в массиве. Так, большие элементы постепенно передвигаются в конец списка, а меньшие — в начало. Получается некий «пузырьковый эффект», где более «легкие» элементы устремляются на поверхность, а «тяжелые» опускаются на дно.

Чтобы использовать сортировку методом пузырька, нужно воспользоваться двумя циклами:

  • внешним;
  • внутренним.

Во внешнем цикле количество проходов определяется длиной списка элементов минус 1, поскольку в процессе сравнения берется первое число и сравнивается с каждым из последующих.

В внутреннем цикле количество проходов зависит от номера итераций внешнего цикла, поскольку конец списка уже отсортирован и совершать проходы по этим числам нет никакого смысла.

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

 Необходимо отсортировать следующие элементы  [24, 86, 12, 9, 33]

Внешний цикл

Первый проход:

  • 24 больше 86 — нет;
  • 86 больше 12 — да, элементы меняются местами;
  • 86 больше 9 — да, элементы меняются местами;
  • 86 больше 33 — да, элементы меняются местами;

В первой итерации получаем [24, 12, 9, 33, 86].

Второй проход:

  • 24 больше 12 — да, элементы меняются местами;
  • 24 больше 9 — да, элементы меняются местами;
  • 24 больше 33 — нет.

Во второй итерации потребуется три прохода, поскольку число 86 уже стоит на своем месте. Получаем [12, 9, 24, 33, 86].

Третий проход:

  • 12 больше 9 — да, элементы меняются местами;
  • 12 больше 24 — нет;

В третьей итерации потребуется два прохода, поскольку 86 и 33 стоят уже на своих местах. Получаем [9, 12, 24, 33, 86].

Четвертый проход:

  • 9 больше 12 — нет.

В четвертой итерации потребуется 1 проход, поскольку остальные числа уже стоят на своих местах. Получаем [9, 12, 24, 33, 86].

Реализация bubble sort

  • С помощью циклов for:
# bubble sort_for
def bubble_sort(array):
    length = len(array)
    for i in range(0, length):
        for j in range(0, length - i - 1):
            if array[j] > array[j + 1]:
                temp = array[j]
                array[j] = array[j + 1]
                array[j + 1] = temp

print("Sort")
arr = []
n = int(input("Array length: ")) 
for i in range(0, n): 
    element = int(input("arr[" + str(i + 1) + "] = "))   
    arr.append(element)
bubble_sort(arr) 
print("Sorted array: ") 
print(arr)

Результат работы программы:

Sort
Array length: 9
arr[1] = 9
arr[2] = 7
arr[3] = 5
arr[4] = 1
arr[5] = 4
arr[6] = 3
arr[7] = 6
arr[8] = 2
arr[9] = 8
Sorted array:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Press any key to continue...
  • С помощью циклов while
# bubble sort_while

a = []
number = int(input("the Total Number of Elements : "))
for i in range(number):
    value = int(input("Enter %d Element of List1 : " %i))
    a.append(value)

i = 0
while(i < number -1):
    j = 0
    while(j < number - i - 1):
        if(a[j] > a[j + 1]):
             temp = a[j]
             a[j] = a[j + 1]
             a[j + 1] = temp
        j = j + 1
    i = i + 1

print("The Sorted List in Ascending Order : ", a)

Результат работы программы:

Please Enter the Total Number of Elements : 5
Please enter the 0 Element of List1 : 4
Please enter the 1 Element of List1 : 2
Please enter the 2 Element of List1 : 8
Please enter the 3 Element of List1 : 9
Please enter the 4 Element of List1 : 3
The Sorted List in Ascending Order :  [2, 3, 4, 8, 9]

Как мы выяснили, алгоритм сортировки пузырьком действует по двойному циклу — внешнему (количество проходов) и внутреннему (по парам сравниваемых элементов). Сортировка требует (n-1) (n-1) операций, а это значит, что временная сложность алгоритма оценивается как O(n2). Метод эффективен для небольших массивов данных.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023