Insertion Sort Algorithm in DSA Java - 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 more items?
Analyze the time complexity of the following code snippet.
for (int i = 1; i < arr.length; i++) {
int key = arr[i];
int j = i - 1;
while (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 while loop that shifts elements to insert the key.
- How many times: The outer for loop runs once per element (n-1 times), and the inner loop can run up to i times for each outer loop step.
As the list grows, the number of comparisons and shifts grows faster because each new element may need to move past many sorted elements.
| 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: The operations grow roughly by the square of the input size, so doubling the input makes the work about four times bigger.
Time Complexity: O(n²)
This means the time to sort grows roughly with the square of the number of items, so sorting twice as many items takes about four times longer.
[X] Wrong: "Insertion Sort always takes the same time no matter the order of the list."
[OK] Correct: If the list is already mostly sorted, Insertion Sort runs much faster because the inner loop does fewer shifts.
Knowing how Insertion Sort behaves helps you understand sorting basics and compare simple methods to faster ones, a useful skill in many coding problems.
"What if we changed the array to be mostly sorted already? How would the time complexity change?"
Practice
Insertion Sort algorithm?Solution
Step 1: Understand insertion sort process
Insertion sort builds the sorted array by taking one element at a time and placing it in the correct position among the already sorted elements.Step 2: Compare with other sorting methods
Other options describe different sorting algorithms: divide and conquer (merge sort), swapping adjacent elements (bubble sort), selecting smallest element (selection sort).Final Answer:
Build the sorted array one element at a time by inserting elements in the correct position -> Option DQuick Check:
Insertion sort = Insert elements step-by-step [OK]
- Confusing insertion sort with bubble sort
- Thinking insertion sort divides array into halves
- Mixing insertion sort with selection sort
arr of length n?Solution
Step 1: Identify insertion sort loop start
Insertion sort starts from the second element (index 1) because the first element is considered sorted.Step 2: Check loop conditions
The loop runs from i = 1 up to i < n (not i <= n) to avoid index out of bounds.Final Answer:
for (int i = 1; i < n; i++) -> Option CQuick Check:
Start from second element: i=1 [OK]
- Starting loop at 0 instead of 1
- Using i <= n causing index errors
- Looping backwards incorrectly
int[] arr = {4, 3, 2, 1};?Solution
Step 1: Trace insertion sort on array {4, 3, 2, 1}
Start with second element 3: insert before 4 -> {3, 4, 2, 1}. Next 2: insert before 3 -> {2, 3, 4, 1}. Finally 1: insert before 2 -> {1, 2, 3, 4}.Step 2: Confirm final sorted array
After all insertions, the array is sorted ascending: [1, 2, 3, 4].Final Answer:
[1, 2, 3, 4] -> Option AQuick Check:
Insertion sort sorts ascending -> [1, 2, 3, 4] [OK]
- Assuming array stays unchanged
- Confusing insertion sort with no sorting
- Partial sorting only
for (int i = 1; i < arr.length; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j] = key;
}What is the error in this code?
Solution
Step 1: Analyze where key is placed after shifting
After shifting elements greater than key to the right, key should be placed atarr[j + 1]becausejwas decremented one extra time.Step 2: Identify incorrect assignment
The code assignsarr[j] = key;which overwrites the wrong index. Correct isarr[j + 1] = key;.Final Answer:
The assignment should be arr[j + 1] = key; instead of arr[j] = key; -> Option AQuick Check:
Place key at arr[j+1] after shifting [OK]
- Assigning key to arr[j] instead of arr[j+1]
- Starting loop at wrong index
- Wrong while condition direction
int[] arr = {5, 3, 8, 6, 2};. After performing insertion sort, what will be the state of the array after the third iteration of the outer loop?Solution
Step 1: Trace each iteration of insertion sort
Initial array: {5, 3, 8, 6, 2}
Iteration 1 (i=1): Insert 3 before 5 -> {3, 5, 8, 6, 2}
Iteration 2 (i=2): Insert 8 (already in correct place) -> {3, 5, 8, 6, 2}
Iteration 3 (i=3): Insert 6 before 8 -> {3, 5, 6, 8, 2}Step 2: Confirm array state after third iteration
After third iteration, array is [3, 5, 6, 8, 2].Final Answer:
[3, 5, 6, 8, 2] -> Option BQuick Check:
After 3rd iteration, partial sort up to index 3 [OK]
- Assuming full sort after 3 iterations
- Not moving elements correctly
- Mixing up iteration counts
Ready to prove it?
Pass the test and this pattern moves unknown
