- Начинаем со второго элемента, будем называть его текущим
- Сравниваем текущий с каждым предыдущим элементом в отсортированной части массива
- Если текущий элемент меньше, чем какой-либо элемент в отсортированной части, сдвигаем этот элемент вправо, чтобы освободить место для текущего элемента
- Повторяем шаги 2-3, пока не найдем подходящее место для текущего, либо пока не дойдем до начала массива
- Вставляем текущий элемент в найденное место
- Переходим к следующему текущему элементу и повторяем все сначала
Пример:
- Изначальный массив: [3, 1, 2]
- current = 1, j = 0. 1 < 3 => сдвигаем 3, получаем [3, 3, 2]. вставляем current на своё место, получаем [1, 3, 2].
- current = 2, j = 1. 2 < 3 => сдвигаем 3 вправо, получаем [1, 3, 3]. 2 > 1 => вставляем current на своё место, получаем [1, 2, 3].
Time Complexity: O(n^2)
Space Complexity: O(1)
Когда использовать: Может быть эффективнее других алгоритмов сортировки на небольших данных