Алгоритм сортировки вставками
Как и в случае с сортировкой выборкой, алгоритм сортировки вставками выполняет сегментацию списка на 2 части: сортированную и несортированную. Далее алгоритм перебирает 2-й сегмент, вставляя текущий элемент в правильную позицию 1-го сегмента.
Описание алгоритма
По умолчанию предполагается, что 1-й элемент списка отсортирован. Следовательно, можно переходить к следующему элементу, обозначив его х. Когда х больше первого, всё остаётся на своих местах. Когда меньше, первый элемент копируется на 2-ю позицию, а в качестве первого элемента устанавливается, соответственно, х.
Таким образом, при переходе к другим элементам неотсортированного сегмента, происходит перемещение более крупных элементов по списку вверх, пока не закончится список или не встретится элемент, который меньше x. В последнем случае x будет помещено на правильную позицию.
Реализация алгоритма
Реализация алгоритма на языке программирования Python выглядит следующим образом:
def insertion_sort(nums): # Сортировка начинается со 2-го элемента, так как по умолчанию считается, что 1-й элемент уже отсортирован for i in range(1, len(nums)): item_to_insert = nums[i] # Сохраняется ссылка на индекс предыдущего элемента j = i - 1 # Элементы сортированного сегмента перемещаются вперёд, если они больше, чем элемент для вставки while j >= 0 and nums[j] > item_to_insert: nums[j + 1] = nums[j] j -= 1 # Вставляется элемент nums[j + 1] = item_to_insert # Происходит проверка работоспособности random_list_of_nums = [9, 1, 15, 28, 6] insertion_sort(random_list_of_nums) print(random_list_of_nums)
Время сортировки вставками
Время сортировки с использованием этого алгоритма, как правило, равняется O(n2), где n — число элементов списка.
Источник — «Sorting Algorithms in Python».