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

Ответ

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

  1. В конец массива (push): O(1) – константное время, если не нужно расширять память.
  2. В начало/середину (unshift/splice): O(n) – линейное время, так как нужно сдвинуть все последующие элементы.

Пример:

const arr = [1, 2, 3];
arr.push(4); // O(1)
arr.unshift(0); // O(n)
arr.splice(2, 0, 1.5); // O(n)

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

Ответ 18+ 🔞

Да ты посмотри, какая интересная хуйня с этими массивами выходит! Вроде бы просто — впихни элемент куда надо, но нет, блядь, тут целая наука, ёпта!

Смотри, если ты лепишь элемент в самый конец массива, то это, блядь, элементарно, O(1). Компьютер тупо прилепляет его на свободное место, и всё, пиздец. Даже если места нет и массив надо расширить — это в среднем тоже быстро, не парься.

А вот если тебе взбрендило вставить эту хрень в самое начало или, того хуже, в середину — вот тут начинается пиздец, O(n). Потому что приходится, сука, все элементы, которые стоят после точки вставки, сдвигать на одну позицию вправо, как этих самых мартышлюшек в очереди за бананом. Представь массив из миллиона элементов — и ты вставляешь один в начало! Это ж надо миллион операций сделать, ебать мои старые костыли!

Вот смотри на примере, тут всё честно:

const arr = [1, 2, 3];
arr.push(4); // O(1) — быстро, как хуй с горы
arr.unshift(0); // O(n) — начинается движняк, всё сдвигаем
arr.splice(2, 0, 1.5); // O(n) — опять сдвиг, блядь

Так что если тебе надо постоянно пихать что-то в начало, то массив — это пиздопроебибна идея. Бери лучше связный список, у него вставка в начало — те самые O(1), константное время, никого сдвигать не надо. Вот так-то, а ты думал, программирование — это просто сиди и хуярь код? Нет, блядь, тут думать надо, э бошка думай!