Назад к вопросам
Junior
72
questionbank

Какие алгоритмы сортировки вы знаете?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Основные алгоритмы сортировки:

  • Сортировка пузырьком (Bubble Sort): Простой, но неэффективный алгоритм, многократно проходящий по списку, меняя местами соседние элементы, если они в неправильном порядке.
  • Сортировка выбором (Selection Sort): Находит наименьший (или наибольший) элемент из неотсортированной части списка и помещает его в начало.
  • Сортировка вставками (Insertion Sort): Постепенно строит отсортированный список, вставляя каждый новый элемент в нужное место уже отсортированной части.
  • Сортировка слиянием (Merge Sort): Рекурсивный алгоритм, разбивающий список на подсписки, сортирующий их и затем объединяющий обратно.
  • Быстрая сортировка (Quick Sort): Алгоритм "разделяй и властвуй", выбирающий опорный элемент (pivot) и перераспределяющий элементы так, чтобы элементы меньше опорного оказались слева, а больше - справа. Затем рекурсивно применяется к подспискам.
  • Сортировка Шелла (Shell Sort): Улучшение сортировки вставками, использующее сравнения на больших расстояниях между элементами.
  • Пирамидальная сортировка (Heap Sort): Использует структуру данных "куча" (heap) для эффективной сортировки.

Также существуют менее распространенные, но эффективные в определенных случаях алгоритмы, такие как сортировка подсчетом (Counting Sort), поразрядная сортировка (Radix Sort), блочная сортировка (Bucket Sort).

Время выполнения основных алгоритмов (в среднем):

Алгоритм сортировки Среднее время выполнения
Сортировка пузырьком O(n²)
Сортировка выбором O(n²)
Сортировка вставками O(n²)
Сортировка слиянием O(n log n)
Быстрая сортировка O(n log n)
Сортировка Шелла Зависит от шага
Пирамидальная сортировка O(n log n)

Пример реализации быстрой сортировки на Python:

def quicksort(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 quicksort(left) + middle + quicksort(right) # Рекурсивная сортировка и объединение