Сортировка методом Пузырька. Реализация алгоритма на языке Python.

Довольно часто при решении задач приходится сортировать значения в списке (массиве) по возрастанию или убыванию. Существует большое количество различных алгоритмов сортировки. Они отличается друг от друга временем выполнения (вычислительной сложностью), используемой памятью, а также сложностью в понимании и реализации.

Можете просмотреть следующее видео — изображающее принцип работы некоторых алгоритмов сортировки:

Один из самый простых алгоритмов сортировки, изучаемый в школьном курсе информатики — «Сортировка методом Пузырька». Его нельзя назвать быстрым, но он очень прост в понимании и реализации. Подходит для сортировки небольших списков (массивов).

Работу данного алгоритма представил в виде танца коллектив из Финляндии

  Как видно из видео процесс сортировки заключается в следующем:

  1. Сравнивается i-ый элемент списка с i+1 — ым. Если больший из них имеет меньший порядковый номер, то они меняются местами (для сортировки по возрастанию)
  2. Таким образом, самый большой элемент  сдвигается в конец списка
  3. Далее процесс повторяется, но не до конца списка, а до последнего отсортированного элемента

Например:

Дан список (массив): 0, 5, 8, 4, 9, 3

Расположим элементы списка в процессе убывания. Т.е. если элемент меньше своего соседа справа — меняется с ним местами.

После первого прохождения по списку первый нолик становится на последнее место

Как можно заметить количество сравнений уменьшилось на единицу, так как число 0 — минимальное заняло свое законное место при первой итерации и сравнивать с ним нет смысла.

Продолжаем:

Последний шаг:

В итоге получаем отсортированный список:

Для списка из шести элементов достаточно выполнить  пять «проходов» по списку, поочередно сравнивая соседние элементы.

Напишем программу сортировки методом Пузырька на Python 3.

#создаем список
li = [0, 5, 8, 4, 9, 3]
#вычисляем длину списка
n = len(li)
#внешний цикл отсчитывает количество "проходов" по списку
for j in range(0,n-1):
    #вложенный цикл сравнивает i-ый c i+1 -ым элементом и при необходимости меняет их местами
    #количество сравнений каждый раз уменьшается на величину j
    for i in range(0,n-j-1):
        if li[i] < li[i+1]:
            li[i],li[i + 1] = li[i + 1], li[i]
    print(j+1, "- ый проход цикла - ",end=" ")
    print(li)
print(li)

Задачи:

  1. Отсортировать список по возрастанию суммы цифр чисел
  2. Дан список целых чисел, состоящий из 30 элементов. Найти сумму пяти самых больших и пяти самых маленьких элементов списка.
Andrey K

Recent Posts

Решение задачи №6 и задачи №22 ЕГЭ по информатике 2021

Настала пора написать серию мини-обучалок по решению задач ЕГЭ по информатике версии 2021 года. В…

4 года ago

Внеурочное занятие по информатике. Пишем игру «Поле чудес» на Python.

Данная статья будет полезна для учителей информатики, которые занимаются программированием с детьми внеурочно. Опыт  показывает, …

4 года ago

Основные алгоритмы в помощь школьнику. Часть 1

Рассмотрим набор наиболее часто встречающихся задач на программирование в школьном курсе информатики. Добавляйте свои задачи…

6 лет ago

Школьный тур Всероссийской олимпиады школьников по информатике 9-11 класс (2018-2019). Разбор задач. Часть 2

В прошлый раз мы разобрали первые две задачи школьного тура Всероссийской олимпиады школьников, проводимой в…

6 лет ago

Школьный тур Всероссийской олимпиады школьников по информатике 9-11 класс (2018-2019). Разбор задач. Часть 1

Закончился школьный тур Всероссийской олимпиады школьников. Разберем первую и вторую задачи тура, проводимого в московских…

6 лет ago

Школьный этап Всероссийской олимпиады школьников по информатике 2017 (9-11 классы). Задача №4. «Плацкартный вагон»

Задача. В плацкартном вагоне 54 места, пронумерованных числами от 1 до 54. Вагон разбит на 9…

7 лет ago