Insertion Sort – Concept, Code, and Real-world Analogy
Sorting is one of the most fundamental operations in computer science. After understanding Bubble Sort, Selection Sort, and Merge Sort, let’s now explore Insertion Sort — a simple yet efficient algorithm for small datasets or nearly sorted lists.
What is Insertion Sort
Insertion Sort is a comparison-based algorithm that builds the sorted array one element at a time. It is similar to how we sort playing cards in our hand — by picking one card at a time and placing it in the correct position relative to the already sorted cards.
Step-by-Step Working
Example array: [7, 3, 5, 2, 6]
Process:
-
Start from the second element (index 1 → value = 3).
-
Compare it with the elements before it.
-
Insert it into its correct position among the previous elements.
-
Repeat this for every element until the entire array is sorted.
Dry Run:
Initial array: [7, 3, 5, 2, 6]
Pass 1 → Insert 3 before 7 → [3, 7, 5, 2, 6]
Pass 2 → Insert 5 before 7 → [3, 5, 7, 2, 6]
Pass 3 → Insert 2 before 3 → [2, 3, 5, 7, 6]
Pass 4 → Insert 6 before 7 → [2, 3, 5, 6, 7]
Final Sorted Array: [2, 3, 5, 6, 7]
Code Implementation
In Python
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
# Move elements that are greater than key to one position ahead
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
# Example
arr = [7, 3, 5, 2, 6]
insertion_sort(arr)
print("Sorted array:", arr)
In C++
#include <iostream>
using namespace std;
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; 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;
}
}
int main() {
int arr[] = {7, 3, 5, 2, 6};
int n = sizeof(arr) / sizeof(arr[0]);
insertionSort(arr, n);
cout << "Sorted array: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
Time and Space Complexity
| Case | Time Complexity | Explanation |
|---|---|---|
| Best Case | O(n) | When the array is already sorted |
| Average Case | O(n²) | When elements are randomly ordered |
| Worst Case | O(n²) | When the array is in reverse order |
| Space Complexity | O(1) | In-place sorting (no extra memory used) |
Variants of Insertion Sort
-
Binary Insertion Sort – Uses binary search to find the correct position of the element (reduces comparisons).
-
Shell Sort – A generalized version of insertion sort that works with gaps, improving efficiency for larger datasets.
Real-World Applications
-
Used in small datasets where efficiency is acceptable.
-
Often used for partially sorted arrays, such as adding a new record to a sorted list.
-
Useful in online algorithms where data arrives one piece at a time.
Comparison with Other Sorting Algorithms
| Feature | Bubble Sort | Selection Sort | Insertion Sort |
|---|---|---|---|
| Comparisons | High | High | Moderate |
| Swaps | Many | Few | Few |
| Adaptive | No | No | Yes |
| Stable | Yes | No | Yes |
| Best for | Learning | Simple logic | Small/partially sorted data |
Conclusion
Insertion Sort is simple, intuitive, and adaptive — making it a great choice for smaller data or nearly sorted inputs.
Although it’s not ideal for large datasets, its real-world analogy (like sorting playing cards) helps build a solid understanding of sorting principles.
Key Takeaways
-
Works efficiently for small or partially sorted data.
-
Performs sorting in-place (no extra space needed).
-
Complexity: Best O(n), Worst O(n²).
-
Stable and adaptive algorithm.
Also check other DS topics,
.png)
Comments
Post a Comment