Введение в Python. Часть 9. Сортировка
Как сортировать данные в Python
Данные часто собираются и хранятся в беспорядке, но чтобы проанализировать их, как правило, нужно их сперва отсортировать – по возрастанию или убыванию. В этом выпуске – о том, как устроена сортировка в Python.
Алгоритм Bubble Sort
Есть несколько алгоритмов сортировки, рассмотрим самый простой. Bubble sort или пузырьковая сортировка получила такое название, потому что с ее помощью мы постепенно перемещаем элементы таким образом, что наименьший оказывается в самом начале, так же как пузырек возд уха всплывает в воде наверх. А самый большой элемент, наоборот, опускается вниз – то есть в конец массива.
Этот метод по очереди сравнивает каждые два соседних элемента и переставляет их местами, если порядок неправильный. Например, возьмем следующий ряд чисел: 67381. Сначала алгоритм сравнит первые два соседних числа: 6 меньше 7, значит порядок правильный, они остаются на своих местах. Затем следующие два числа – 7 больше 3, значит они меняются местами. Затем он сравнит 7 и 8, и тоже переставит их местами и так далее. После первого прохода по ряду чисел в конце окажется самое большое число – 8. И дальше алгоритм проходит по всем числам снова и будет проходить столько раз, пока каждое число не встанет на свое место – от меньшего к большему.
Вот как это выглядит на языке Питон. Есть список с числами в рандомном порядке, который нужно отсортировать. Сперва сравним первые два числа и поменяем их местами, если порядок неправильный – то есть второе число больше первого. И попросим распечатать получившийся список.
Этот код сравнил 6 с 7, и оставил их на своих местах. Теперь сравним следующие два числа: меняем в коде индексы на 1 и 2. И видим, что он сравнил 3 и 7 и поменял их местами.
Эту операцию нам надо выполнять столько раз, сколько у нас в списке чисел, чтобы каждое из них нашло свое место. Поэтому чтобы не прописывать для каждой пары одну и ту же операцию, мы создаем цикл, равный длине нашего массива минус 1, потому что последнее число в списке не имеет соседа справа, и значит эту операцию сравнения производить не нужно.