Skip to content

Sorting algorithm

Определение#

Алгоритмы сортировки — это наборы инструкций, которые принимают на вход неупорядоченный список элементов и возвращают его в определённом порядке (по возрастанию или убыванию).

Подходы к реализации#

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

  • Итеративные (Простые): используют вложенные циклы для постепенного перемещения элементов на свои места. Подходят для небольших данных.
    Примеры: Bubble Sort Selection Sort Insertion Sort.

  • Рекурсивные (Сложные): основаны на стратегии «Разделяй и властвуй» (Divide and Conquer). Они разбивают массив на части, сортируют их и соединяют обратно.
    Примеры: Merge Sort Quick Sort.

Характеристики алгоритмов#

При выборе алгоритма разработчики ориентируются на три ключевых показателя.

Алгоритм Среднее время Память Стабильный? Особенности
Bubble Sort O(n²) O(1) Да Много лишних обменов
Selection Sort O(n²) O(1) Нет Минимум операций записи
Quick Sort O(nlogn) O(logn) Нет Самый быстрый на практике
Merge Sort O(nlogn) O(n) Да Гарантированная скорость

Популярные алгоритмы#

  • Bubble Sort (Сортировка пузырьком)

Самый простой алгоритм: он многократно проходит по списку, сравнивая соседние элементы и меняя их местами, если они стоят в неправильном порядке. Самые «тяжёлые» элементы постепенно «всплывают» к концу списка.

  • Quick Sort (Быстрая сортировка)

Алгоритм выбирает опорный элемент (pivot) и распределяет остальные элементы в две группы: те, что меньше опорного, и те, что больше. Затем процесс рекурсивно повторяется для каждой группы.

    def quick_sort(arr):
        if len(arr) <= 1:
            return arr
        pivot = arr[len(arr) // 2]  # Опорный элемент
        left = [x for x in arr if x < pivot]
        middle = [x for x in arr if x == pivot]
        right = [x for x in arr if x > pivot]
        return quick_sort(left) + middle + quick_sort(right)

Ключевые мысли#

  • Встроенная сортировка в Python (.sort() и sorted()) использует алгоритм Timsort, который объединяет лучшие черты сортировки вставками и слиянием.

  • Для маленьких списков часто лучше использовать простые алгоритмы, так как у них меньше накладных расходов на вызовы функций.

  • Память — критический фактор: если её мало, выбирайте Quick Sort или Heap Sort, а не Merge Sort.