Array Insertion: How to Insert Elements

Learn Array Insertion: How to Insert Elements with practical examples, explanations, best practices, and real-world coding techniques.

What Is Array Insertion?

Array insertion is the process of adding a new element to an array at a specific position. The position may be at the beginning, at the end, or somewhere in the middle of the array.

Inserting an element into an array sounds simple, but the cost depends on where the new element is placed. When an element is inserted into the middle or beginning of a traditional array, existing elements may need to be shifted to create space.

Example of Array Insertion

Consider the following array:

[10, 20, 30, 40]

If we insert 25 at index 2, the elements from that position onward must move one position to the right.

Before:
[10, 20, 30, 40]

Insert 25 at index 2:

[10, 20, 25, 30, 40]

The original 30 moves from index 2 to index 3, and 40 moves from index 3 to index 4.

Why Do Array Elements Need to Move?

Arrays store elements in a specific sequence of positions. When an element needs to be inserted into an occupied position, the existing elements cannot simply remain where they are if the order must be preserved.

Therefore, elements are shifted toward the end of the array before the new value is placed into the desired position.

Insert 25 at index 2

Step 1:
Move 40 → index 4

[10, 20, 30, 40, _]

Step 2:
Move 30 → index 3

[10, 20, 30, 30, 40]

Step 3:
Place 25 → index 2

[10, 20, 25, 30, 40]

Types of Array Insertion

The insertion process changes depending on the position where the new element needs to be placed.

  • Insertion at the beginning
  • Insertion at the end
  • Insertion at a specific index
  • Insertion in the middle

Inserting at the Beginning of an Array

When an element is inserted at index 0, every existing element must move one position to the right to preserve the original ordering.

Before:
[20, 30, 40]

Insert 10 at the beginning:

[10, 20, 30, 40]

Because all existing elements may need to be shifted, insertion at the beginning takes O(n) time for an array with n elements.

Inserting at the End of an Array

Adding an element to the end of an array is usually simpler because existing elements do not need to move.

Before:
[10, 20, 30]

Insert 40 at the end:

[10, 20, 30, 40]

In dynamic arrays, appending an element is typically O(1) amortized. However, when the underlying storage needs to grow, the particular resize operation can require copying existing elements.

Inserting at a Specific Index

To insert an element at a particular index, the elements from that index through the current end of the array must be shifted one position to the right.

For example:

Array:
[10, 20, 30, 40, 50]

Insert 25 at index 2:

[10, 20, 25, 30, 40, 50]

Here, 30, 40, and 50 need to move one position to the right.

Array Insertion Algorithm

A basic insertion algorithm follows three steps:

  1. Validate the insertion position.
  2. Shift existing elements one position to the right.
  3. Place the new element at the requested index.

The shifting must generally happen from right to left. Otherwise, an element could be overwritten before it has been moved.

Why Shift From Right to Left?

Suppose we want to insert a value into the middle of an array. If we move elements from left to right, the next value can overwrite the value that still needs to be moved.

Moving from the end toward the insertion position avoids this problem.

for (let i = length; i > index; i--) {
  array[i] = array[i - 1];
}

After the shifting is complete, the new value can safely be placed at the target index.

Manual Array Insertion in JavaScript

JavaScript arrays provide built-in methods such as splice(), but implementing insertion manually is useful for understanding how array insertion works internally.

function insertAt(array, index, value) {
  for (let i = array.length; i > index; i--) {
    array[i] = array[i - 1];
  }

  array[index] = value;
}

const numbers = [10, 20, 30, 40];

insertAt(numbers, 2, 25);

console.log(numbers);
// [10, 20, 25, 30, 40]

Using JavaScript splice()

In practical JavaScript applications, the built-in Array.prototype.splice() method can insert an element at a specific position.

const numbers = [10, 20, 30, 40];

numbers.splice(2, 0, 25);

console.log(numbers);
// [10, 20, 25, 30, 40]

The first argument specifies the starting index, the second specifies how many existing elements should be removed, and the remaining argument is the value to insert.

Insertion Complexity

The time complexity of array insertion depends on where the element is inserted.

Insertion Position Typical Complexity Reason
Beginning O(n) Most elements must shift
Middle O(n) Elements after the position shift
End O(1) amortized for dynamic arrays No shifting is normally required

Best, Average, and Worst Cases

For a traditional array, insertion at the end can be very efficient when unused capacity is available. Insertion near the beginning requires many elements to move.

Therefore, the position of the insertion is an important factor when analyzing array performance.

Case Complexity
Insert at end with available capacity O(1)
Insert in middle O(n)
Insert at beginning O(n)
Append with dynamic resizing O(1) amortized

Insertion in Static and Dynamic Arrays

The cost of insertion also depends on how the array manages its storage.

Static Arrays

A static array has a fixed capacity. If all positions are occupied, a new element cannot simply be added without creating another storage area or using a different structure.

Dynamic Arrays

Dynamic arrays can grow when their current capacity is exhausted. When resizing is required, existing elements may be copied into a larger storage area. This is why appending is commonly described as O(1) amortized rather than O(1) for every individual operation.

Array Insertion vs Array Update

Insertion and updating are different operations. An update replaces the value at an existing index, while an insertion increases the number of elements and shifts existing elements when necessary.

Update:

[10, 20, 30]
        ↓
[10, 25, 30]


Insertion:

[10, 20, 30]
        ↓
[10, 25, 20, 30]

Understanding this distinction is important when analyzing array operations and choosing an appropriate data structure.

Array Insertion vs Linked List Insertion

Arrays and linked lists handle insertion differently. An array may need to shift many elements to make room, while a linked list can change node references when the insertion position has already been located.

Operation Array Linked List
Insert at beginning O(n) O(1) with a head reference
Insert at known position O(n) O(1) after reaching the position
Random access O(1) O(n)

This trade-off is one of the fundamental reasons different data structures exist. Arrays provide efficient indexed access, while linked lists can make structural insertion and deletion more efficient once the target position is known.

Validating an Insertion Index

A robust insertion implementation should validate the requested index. For insertion, a position equal to the current array length is normally valid because it represents appending a new element.

Valid insertion indexes for:

[10, 20, 30]

0, 1, 2, 3

An index greater than the current length is generally invalid for a simple indexed insertion operation.

Common Array Insertion Mistakes

  • Shifting elements from left to right and overwriting values.
  • Using an invalid insertion index.
  • Forgetting to increase the logical array size after insertion.
  • Confusing insertion with updating an existing element.
  • Assuming every array insertion takes O(1) time.
  • Ignoring dynamic-array resizing when analyzing append operations.

When Is Array Insertion Efficient?

Array insertion is most efficient when adding elements near the end of a dynamic array and sufficient capacity is available. Inserting near the beginning or middle can require shifting many elements.

If an application performs frequent insertions near the beginning or middle of a large collection, another data structure may be more appropriate.

Key Takeaways

  • Array insertion adds a new element at a specified position.
  • Insertion at the beginning or middle usually requires shifting elements.
  • Shifting should normally happen from right to left.
  • Insertion at the end of a dynamic array is O(1) amortized.
  • Insertion near the beginning or middle is typically O(n).
  • JavaScript provides splice() for practical array insertion.
  • Manual insertion helps explain the underlying shifting process.
  • Arrays favor fast indexed access, while linked lists can favor structural insertion.

Code Examples

function insertAt(array, index, value) {
  if (index < 0 || index > array.length) {
    throw new Error("Invalid insertion index");
  }

  for (let i = array.length; i > index; i--) {
    array[i] = array[i - 1];
  }

  array[index] = value;
}

const numbers = [10, 20, 30, 40];

insertAt(numbers, 2, 25);

console.log(numbers);
// [10, 20, 25, 30, 40]
    
const numbers = [20, 30, 40];

numbers.unshift(10);

console.log(numbers);
// [10, 20, 30, 40]

numbers.push(50);

console.log(numbers);
// [10, 20, 30, 40, 50]
    
const numbers = [10, 20, 30, 40];

numbers.splice(2, 0, 25);

console.log(numbers);
// [10, 20, 25, 30, 40]

numbers.splice(1, 0, 15, 17);

console.log(numbers);
// [10, 15, 17, 20, 25, 30, 40]
    

Pro Tip

When analyzing array insertion, focus on how many existing elements must move. Inserting at the beginning can require shifting the entire array, while appending to a dynamic array is typically O(1) amortized when capacity is available.

🎨 IgKnight Docs

Master HTML, CSS, JS, Python, .NET and more with easy-to-follow lessons and practical code examples.

© 2025 IgKnight Learning Platform. All rights reserved.