Метод пузырька (или пузырьковая сортировка) — это простой алгоритм сортировки, который работает путем многократного прохода по списку, сравнивая соседние элементы и меняя их местами, если они находятся в неправильном порядке.
Принцип работы пузырьковой сортировки с флагом заключается в том, чтобы отслеживать, были ли произведены обмены в ходе итерации. Если за одну полную итерацию обменов не произошло, это означает, что список уже отсортирован, и можно прекратить выполнение алгоритма.
Теперь давайте реализуем этот алгоритм на вашем примере списка:
Исходный список:
[-29, 106, -133, -1, -148, 110, 85, -25, -80, -142, 94, -115, -83, 82, 86]
Вот программа, реализующая сортировку пузырьком с флагом:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False # Флаг для отслеживания обменов
# Проходим по неотсортированной части массива
for j in range(0, n-i-1):
# Сравниваем соседние элементы
if arr[j] > arr[j+1]:
# Меняем местами, если они в неправильном порядке
arr[j], arr[j+1] = arr[j+1], arr[j]
swapped = True # Устанавливаем флаг на True, если обмен произошел
# Если не было обменов, массив уже отсортирован
if not swapped:
break
return arr
# Исходный список
arr = [-29, 106, -133, -1, -148, 110, 85, -25, -80, -142, 94, -115, -83, 82, 86]
sorted_arr = bubble_sort(arr)
print("Отсортированный список:", sorted_arr)
Теперь разберем, как происходит сортировка шаг за шагом:
Пояснение шагов:
Итерация 0:
- Сравниваются элементы от 0 до 13.
- Обмены происходят между элементами, если предыдущий больше следующего.
- После итерации флаг
swapped остается True (производились обмены), продолжаем.
Итерация 1:
- Сравниваются элементы от 0 до 12.
- Обмены происходят.
swapped = True, продолжаем.
Итерация 2:
- Сравниваем от 0 до 11.
- Обмены происходят.
swapped = True, продолжаем.
Итерация 3:
- Сравниваем от 0 до 10.
- Обмены происходят.
swapped = True, продолжаем.
Итерация 4:
- Сравниваем от 0 до 9.
- Обмены происходят.
swapped = True, продолжаем.
Итерация 5:
- Сравниваем от 0 до 8.
- Обмены происходят.
swapped = True, продолжаем.
Итерация 6:
- Сравниваем от 0 до 7.
- Обмены происходят.
swapped = True, продолжаем.
Итерация 7:
- Сравниваем от 0 до 6.
- Обмены происходят.
swapped = True, продолжаем.
Итерация 8:
- Сравниваем от 0 до 5.
- Обмены проходят.
swapped = True, продолжаем.
Итерация 9:
- Сравниваем от 0 до 4.
- Обмены проходят, но теперь в конце итерации
swapped = False.
- Это значит, что массив уже отсортирован.
Результат:
Таким образом, нужный результат (отсортированный массив) достигается на 10-й итерации. Список после сортировки будет выглядеть так:
[-148, -142, -133, -115, -83, -80, -29, -25, -1, 82, 85, 86, 94, 106, 110]
Простой анализ позволяет видеть, как работает пузырьковая сортировка, и использовать ее для эффективной сортировки списков небольшого размера.