Insertion Sort Algorithm in DSA Go - Time & Space Complexity
We want to understand how the time taken by Insertion Sort changes as the list size grows.
How does the number of steps increase when sorting bigger lists?
Analyze the time complexity of the following code snippet.
func insertionSort(arr []int) {
for i := 1; i < len(arr); i++ {
key := arr[i]
j := i - 1
for j >= 0 && arr[j] > key {
arr[j+1] = arr[j]
j--
}
arr[j+1] = key
}
}
This code sorts an array by inserting each element into its correct place among the sorted elements to its left.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The inner loop that shifts elements to insert the key.
- How many times: The outer loop runs n-1 times, and the inner loop can run up to i times for each i from 1 to n-1.
As the list grows, the number of comparisons and shifts grows roughly with the square of the list size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 45 comparisons and shifts |
| 100 | About 4,950 comparisons and shifts |
| 1000 | About 499,500 comparisons and shifts |
Pattern observation: Doubling the input size roughly quadruples the work needed.
Time Complexity: O(n²)
This means the time to sort grows roughly with the square of the number of items.
[X] Wrong: "Insertion Sort always takes the same time no matter the input order."
[OK] Correct: If the list is already mostly sorted, Insertion Sort runs faster because the inner loop does fewer shifts.
Knowing how Insertion Sort scales helps you understand when to use it and how it compares to faster sorting methods.
"What if we changed the array to be nearly sorted? How would the time complexity change?"
Practice
Insertion Sort algorithm?Solution
Step 1: Understand insertion sort process
Insertion sort builds the sorted list by taking one element at a time and placing it in the correct position relative to the already sorted part.Step 2: Compare with other sorting methods
Other options describe merge sort (B), bubble sort (C), and selection sort (D), which are different algorithms.Final Answer:
Build the sorted array one element at a time by inserting elements into their correct position -> Option BQuick Check:
Insertion sort = Insert elements step-by-step [OK]
- Confusing insertion sort with bubble or selection sort
- Thinking insertion sort divides array recursively
- Assuming insertion sort swaps all elements repeatedly
arr?Solution
Step 1: Identify correct loop start for insertion sort
Insertion sort starts from the second element (index 1) because the first element is considered sorted.Step 2: Check loop conditions
Loop runs while i is less than length of array. for i := 1; i < len(arr); i++ { matches this exactly.Final Answer:
for i := 1; i < len(arr); i++ { -> Option AQuick Check:
Start from index 1 to end [OK]
- Starting loop at 0 instead of 1
- Using <= instead of < in loop condition
- Looping backwards incorrectly
arr := []int{4, 3, 2, 1}?Solution
Step 1: Trace insertion sort on given array
Start with 4 (sorted). Insert 3 before 4 -> [3,4,2,1]. Insert 2 before 3 -> [2,3,4,1]. Insert 1 before 2 -> [1,2,3,4].Step 2: Confirm final sorted slice
The array is sorted in ascending order: [1, 2, 3, 4].Final Answer:
[1, 2, 3, 4] -> Option CQuick Check:
Sorted ascending = [1, 2, 3, 4] [OK]
- Assuming no change in array
- Stopping sorting early
- Mixing up partial sorted states
for i := 1; i < len(arr); i++ {
key := arr[i]
j := i - 1
for j >= 0 && arr[j] > key {
arr[j+1] = arr[j]
j--
}
arr[j] = key
}Solution
Step 1: Analyze inner loop and final assignment
After shifting elements greater than key, the correct position is j+1, but code assigns key to arr[j], which is incorrect.Step 2: Correct the assignment
It should be arr[j+1] = key to place key in the right spot after shifting.Final Answer:
The final assignment should be arr[j+1] = key, not arr[j] = key -> Option DQuick Check:
Insert key at arr[j+1] after shifting [OK]
- Assigning key to wrong index after inner loop
- Reversing comparison operator in inner loop
- Starting outer loop at 0
arr := []int{5, 2, 9, 1, 5, 6}, how many total element shifts occur during insertion sort?Solution
Step 1: Trace shifts for each insertion
Insert 2: shift 5 -> 1 shift
Insert 9: no shift -> 0 shifts
Insert 1: shift 9, 5, 2 -> 3 shifts
Insert 5: shift 9, 5 -> 2 shifts
Insert 6: shift 9 -> 1 shiftStep 2: Sum all shifts
Total shifts = 1 + 0 + 3 + 2 + 1 = 7 shifts.Step 3: Verify options
7 is present as 7.Final Answer:
7 -> Option AQuick Check:
Count shifts carefully for each insertion [OK]
- Counting comparisons instead of shifts
- Missing shifts when multiple elements move
- Confusing shifts with swaps
Ready to prove it?
Pass the test and this pattern moves unknown
