Files
knowledge_vault/Языки программирования/Сортировка вставками.md
2026-05-02 21:35:16 +05:00

22 lines
2.5 KiB
Markdown
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Это алгоритм, в котором элементы входной последовательности просматриваются по одному, и каждый новый поступивший элемент размещается в подходящее место среди ранее упорядоченных элементов. [Сложность алгоритма](Оценка%20сложности%20алгоритма): $O(n^2)$.
#### Алгоритм
На вход алгоритма подаётся последовательность $n$ чисел: $a_1,a_2,...,a_n$. Сортируемые числа также называют ключами. Входная последовательность на практике представляется в виде массива с $n$ элементами. На выходе алгоритм должен вернуть перестановку исходной последовательности $a^`_1,a^`_2,...,a^`_n$, чтобы выполнялось следующее соотношение $a_1^`\leqslant a_2^`\leqslant ... \leqslant a_n^`$ .
В начальный момент отсортированная последовательность пуста. На каждом шаге алгоритма выбирается один из элементов входных данных и помещается на нужную позицию в уже отсортированной последовательности до тех пор, пока набор входных данных не будет исчерпан. В любой момент времени в отсортированной последовательности элементы удовлетворяют требованиям к выходным данным алгоритма.
Данный алгоритм можно ускорить при помощи использования бинарного поиска для нахождения места текущему элементу в отсортированной части. Проблема с долгим сдвигом массива вправо решается при помощи смены указателей.
#### Пример
![[sort_Insertion.gif]]
#### В виде кода
```python
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr
```