Shell Sort Средний ~24 мин чтения

Shell Sort

Урок 7 из 10 в курсе Алгоритмы. Старт.

Interactive

Shell Sort Visualizer

Введите числа и управляйте пошаговым выполнением алгоритма.

sorting

История шагов

Shell Sort

Shell Sort — улучшение insertion sort, где сравнение идёт с элементами через определённый шаг (gap).

Основная идея

Сначала сортируем элементы с большим gap, постепенно уменьшая gap до 1.

Пошаговый пример

Исходный массив:

[12, 34, 54, 2, 3]
  1. Gap = 2: частично упорядочиваем массив
  2. Gap = 1: выполняем финальный insertion sort
  3. Получаем [2,3,12,34,54]

Псевдокод

gap = n / 2
while gap > 0:
    for i from gap to n - 1:
        temp = arr[i]
        j = i
        while j >= gap and arr[j - gap] > temp:
            arr[j] = arr[j - gap]
            j -= gap
        arr[j] = temp
    gap /= 2

Оптимизация: Подбор последовательности gap сильно влияет на скорость.

Сложность

Время Зависит от gap, обычно между O(n^1.3) и O(n²).
Память O(1), in-place.

Когда используется

  • Средние массивы
  • Когда нужен простой и быстрый in-place алгоритм
  • Встраиваемые системы

Ключевые свойства

  • Обычно не стабильный
  • In-place
  • Быстрее insertion sort на случайных данных