In the previous article, we explored how insertion sort works through visual examples and step-by-step explanations. Now, let’s dive deeper into the algorithmic details by examining the pseudocode for a basic insertion sort algorithm. By the end of this article, you’ll have a clear understanding of how to implement insertion sort in any programming language.
Prerequisites:
Understanding the Key Concepts
Before we look at the pseudocode, let’s understand the key concepts used in insertion sort:
Current Element (key):
- The element we’re currently trying to insert into its correct position
- Selected from the unsorted portion of the array
- Also called the “key” element
Sorted Portion:
- The left part of the array that’s already sorted
- Initially contains just the first element
- Grows from left to right as the algorithm progresses
Comparison Index (j):
- Used to scan through the sorted portion
- Helps find the correct position for the current element to be inserted
- Moves from right to left in the sorted portion
Algorithm for Iterative Insertion Sort
Start with First Element:
- Consider the first element as a sorted portion of length 1
- The rest of the array is the unsorted portion
Select Next Element:
- Take the first element from the unsorted portion
- This becomes our current element (key)
Find Correct Position:
- Compare key with each element in the sorted portion
- Move elements greater than key one position ahead
- Continue until you find the correct position
Insert Element:
- Place the key in its correct position
- The sorted portion now grows by one element
Repeat:
- Continue steps 2-4 until the entire array is sorted
Pseudocode for Iterative Insertion Sort
Here’s the pseudocode for the iterative approach:
def insertionSort(arr):
n = len(arr)
# Start from the second element (index 1)
for i in range(1, n):
# Store the current element as key
key = arr[i]
# Initialize the position for comparison to the element before current
j = i - 1
# Move elements of arr[0..i-1], that are greater than key, to one position ahead
# of their current position
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j] # Shift elements to the right
j -= 1 # Move to the next element to the left
# Insert the key (current element) into its correct position
arr[j + 1] = key
Example Walkthrough
Let’s trace the iterative pseudocode with the array [5, 2, 8, 1, 9]. The vertical bar (|) separates the sorted portion (left) from the unsorted portion (right):
First Iteration (
i = 1):- Initial array:
[5 | 2, 8, 1, 9](5 is our sorted portion) - We pick
key = 2(first element from unsorted portion),i = 1,key = 2,j = 0 - Compare 2 with 5: Since
5 > 2, we shift 5 one position right arr[1] = 5,j = -1- Place 2 in the empty spot
arr[0] = 2- Result:
[2, 5 | 8, 1, 9](now first two elements are sorted)
- Initial array:
Second Iteration (
i = 2):- Current array:
[2, 5 | 8, 1, 9] - We pick
key = 8,i = 2,key = 8,j = 1 - Compare 8 with 5: Since
5 < 8, 8 is already in correct position - Result:
[2, 5, 8 | 1, 9](first three elements are sorted)
- Current array:
Third Iteration (
i = 3):- Current array:
[2, 5, 8 | 1, 9] - We pick
key = 1,i = 3,key = 1,j = 2 - Compare and shift:
8 > 1, so 8 moves right (arr[3] = 8),j = 1 - Then
5 > 1, so 5 moves right (arr[2] = 5),j = 0 - Then
2 > 1, so 2 moves right (arr[1] = 2),j = -1 - Place 1 in the empty spot at beginning
arr[0] = 1- Result:
[1, 2, 5, 8 | 9](first four elements are sorted)
- Current array:
Fourth Iteration (
i = 4):- Current array:
[1, 2, 5, 8 | 9] - We pick
key = 9,i = 4,key = 9,j = 3 - Compare 9 with 8: Since
8 < 9, 9 is already in correct position - Result:
[1, 2, 5, 8, 9 |](entire array is now sorted!)
- Current array:
What’s Next?
Now that you understand the pseudocode, you might want to:
- Study the implementations in different programming languages
- Learn about common mistakes and how to avoid them
- Explore the time and space complexity analysis
- Understand the Advantages and Disadvantages of Insertion Sort Algorithm