Слайд 4
🧩 Сортировка простыми вставками (Insertion Sort)
Алгоритм сортировки простыми вставками делит список на две части: отсортированную и неотсортированную. Из неотсортированной части по одному извлекаются элементы и вставляются в нужное место в отсортированной части. Этот процесс повторяется, пока все элементы не окажутся упорядочены.
💡 Алгоритм эффективен, когда список уже частично отсортирован и содержит немного элементов (до 10).
В таких случаях он может быть быстрее даже некоторых «умных» сортировок.
🔹 Пример: сортировка a = [5, 1, 8, 2, 4] по возрастанию
Первый проход:
Делим список на части: отсортированная [5], неотсортированная [1, 8, 2, 4].
Извлекаем элемент 1 и вставляем его перед 5:
[1, 5, 8, 2, 4]
Второй проход:
Отсортированная часть: [1, 5], неотсортированная: [8, 2, 4].
Извлекаем 8 — оно уже на своём месте:
[1, 5, 8, 2, 4]
Третий проход:
Отсортированная часть: [1, 5, 8], неотсортированная: [2, 4].
Извлекаем 2 и вставляем его между 1 и 5:
[1, 2, 5, 8, 4]
Четвёртый проход:
Отсортированная часть: [1, 2, 5, 8], неотсортированная: [4].
Извлекаем 4 и вставляем его между 2 и 5:
[1, 2, 4, 5, 8]
✅ Теперь список полностью отсортирован.
💻 Реализация на Python
a = [1, 7, -3, 9, 0, -67, 34, 12, 45, 1000, 6, 8, -2, 99]
n = len(a)
for i in range(1, n):
item = a[i] # элемент для вставки
j = i - 1
while j >= 0 and a[j] > item: # сдвигаем элементы вправо, пока не найдём место
a[j + 1] = a[j]
j -= 1
a[j + 1] = item # вставляем элемент на нужное место
print('Отсортированный список:', a)
Результат:
Отсортированный список: [-67, -3, -2, 0, 1, 6, 7, 8, 9, 12, 34, 45, 99, 1000]
⚙️ Как работает алгоритм
- Сначала считается, что первый элемент уже отсортирован.
- Далее каждый следующий элемент вставляется в правильную позицию среди предыдущих.
- На каждом шаге отсортированная часть списка увеличивается на один элемент.
⚡ Время работы алгоритма:
O(n²) в худшем случае,
но в случае почти отсортированных данных — близко к O(n).
Поэтому его часто применяют в реальных алгоритмах для «досортировки» небольших массивов.