Hi everyone!
Today I solved a very interesting array problem where we need to sort an array containing only 0s, 1s, and 2s — but without using the built-in sort function.
Problem
Given an array of 0s, 1s, and 2s, sort it in ascending order.
Example:
Input: [0, 1, 2, 0, 1, 2]
Output: [0, 0, 1, 1, 2, 2]
My Approach
At first, sorting seemed like the obvious solution.
But the problem specifically says:
Don’t use built-in sort
So I looked for a better approach
That’s when I learned about the Dutch National Flag Algorithm.
Logic
We use three pointers:
-
low→ for placing 0s -
mid→ current element -
high→ for placing 2s
Rules:
- If element is 0 → swap with
low, move both - If element is 1 → just move
mid - If element is 2 → swap with
high, movehigh
Code (Python)
class Solution:
def sort012(self, arr):
low, mid, high = 0, 0, len(arr) - 1
while mid <= high:
if arr[mid] == 0:
arr[low], arr[mid] = arr[mid], arr[low]
low += 1
mid += 1
elif arr[mid] == 1:
mid += 1
else:
arr[mid], arr[high] = arr[high], arr[mid]
high -= 1
return arr
Time & Space Complexity
- Time: O(n) (single traversal)
- Space: O(1) (in-place)
What I Learned
- Not all sorting problems need sorting functions
- Pointer-based approaches can be very efficient
- This is a classic and important algorithm
Thanks for reading!
If you know any other approach, feel free to share.
Top comments (0)