Какая временная сложность вставки элемента в массив в Swift?

«Какая временная сложность вставки элемента в массив в Swift?» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Временная сложность зависит от позиции вставки:

  • Вставка в конец (append(_:)): O(1) в среднем (амортизированная). Swift использует динамический массив с запасом емкости (capacity). Если емкости достаточно, операция константна. При исчерпании емкости происходит переаллокация с копированием всех элементов (O(n)), но это случается редко, что дает амортизированную O(1).
  • Вставка в начало или середину (insert(_:at:)): O(n), где n — количество элементов. Все элементы после точки вставки необходимо сдвинуть.

Пример:

var numbers = [1, 2, 3, 4]
numbers.append(5) // O(1) (амортизированная)
numbers.insert(0, at: 0) // O(n), сдвигает элементы [1,2,3,4,5]

Практический совет: Для частых вставок в произвольные позиции рассмотрите другие структуры данных, например, связный список (O(1) для вставки при известном узле).