04.03.154 Сортировка вставками - justjune/AiSD2026 GitHub Wiki
Пояснение алгоритма
Суть алгоритма сортировки вставками заключается в том, что у нас есть какой то список чисел ( либо других объектов, которые можно сравнить), которые нам нужно отсортировать.
1.) Мы считаем, что первый элемент в списке уже отсортирован.
2.) Берём следующий элемент из неотсортированной части и сравниваем его с предыдущим(т.е с элементом из отсортированной части).
3.) Если условие сортировки выполняется, то мы меняем их местами, в обратном случае считаем элемент отсортированным.
4.) Шагами 2 и 3 проходим весь список.
Реализация алгоритма на примере с массивом чисел
for (i = 1; i < n; i++) {
j = i; //тут мы ставим ограничение, чтобы при сравнении элементов не уйти за границу массива
while ((j > 0) && (s[j] < s[j-1])) {
swap(&s[j], &s[j-1]);
j = j - 1;
}
}
Сложность алгоритма
Сложность этого алгоритма O(n^2), ведь в наихудшем случае при сортировке количество операций будет равно сумме чисел от 0 до n-1.(т.е n*(n-1)/2).
Дополнительно хочется сказать, что на скорость алгоритма сильно влияет эффективность самих структур данных. Например в случаи с сбалансированным двоичным деревом время поиска 1 элемента будет равно O(log(n)), значит n элементов - O(n*log(n)). Если дополнительно пользоваться симметричным обходом то время будет линейно - O(n).
Ссылки на литературу
[ 03.04.108 Двоичные деревья поиска ]
[ Скиена 2022 с. 108 - 114]