← Back to Blog
Mastering O(n log n) Time Algorithms
2023-08-06
Introduction to O(n log n) Algorithms
O(n log n) algorithms are a class of efficient algorithms that combine the benefits of linear and logarithmic time complexities. They are often the best achievable time complexity for comparison-based sorting algorithms.
Common O(n log n) Algorithms
- Merge Sort: Divides the array, sorts recursively, and merges
- Quicksort: Chooses a pivot, partitions the array, and sorts recursively
- Heapsort: Builds a heap and repeatedly extracts the maximum element
Why O(n log n)?
The O(n log n) time complexity arises from:
- Dividing the problem into smaller subproblems (log n levels)
- Processing all elements at each level (n work per level)
Implementing Merge Sort
Here's a Python implementation of the merge sort algorithm:
def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left = merge_sort(arr[:mid]) right = merge_sort(arr[mid:]) return merge(left, right) def merge(left, right): result = [] i, j = 0, 0 while i < len(left) and j < len(right): if left[i] <= right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 result.extend(left[i:]) result.extend(right[j:]) return result
Conclusion
Mastering O(n log n) algorithms is crucial for efficient sorting and many other computational problems. Their balance of efficiency and simplicity makes them a cornerstone of algorithm design.