Skip to content
BytePatterns

Insertion Sort

Sorting: lesson 4 of 10

Build a sorted run, slide each newcomer into place.

Lesson 4 of 10 · 5 min

Insertion Sort

Step 1 of 18

Treat the first value as a sorted region of one, then absorb the rest one at a time.

The Idea

Treat the left side as already sorted and pick up the next element. Shift the bigger values one slot right until a gap opens, then drop it in. Generally O(n²), but close to O(n) on nearly sorted data.

Real-World Example

A barista clips order tickets onto a rail kept in pickup-time order. A new ticket slides past the later ones until it finds its slot, usually only a step or two, because it is typically the latest anyway.

The Code

def insertion_sort(nums):
    for i in range(1, len(nums)):
        key = nums[i]
        j = i - 1
        # slide bigger values one slot to the right
        while j >= 0 and nums[j] > key:
            nums[j + 1] = nums[j]
            j -= 1
        nums[j + 1] = key      # drop key into the gap
    return nums
# insertion_sort([7, 3, 9, 3]) -> [3, 3, 7, 9]

Python

Your turn

What does this print?

nums = [2, 5, 9, 0]
key, j = 4, 2
while j >= 0 and nums[j] > key:
  nums[j + 1] = nums[j]
  j -= 1
nums[j + 1] = key
print(nums)

Mini quiz

1 / 3

Insertion sort on already-sorted input costs:

New lessons land every few weeks

Leave an address and we will tell you when the next one is up. That is the only reason we will use it.

One address, stored so we can email you. Nothing else, ever.