Sort an array of 0s, 1s and 2s
an array of 0s, 1s and 2s is given , we should sort the array . 0s first, then all 1s and all 2s in last.
example
Input: {0, 1, 2, 0, 1, 2, 0, 1, 1}
Output:{0, 0, 0, 1, 1, 1, 1, 2, 2}
easy method:
use the inbuild sort function in c++:
implementation c++:
void sort012(int a[], int n)
{
sort(a,a+n);
}
- Time Complexity: O(nlogn).
as sort function O(nlogn) time to sort an array. - Space Complexity: O(1).
No extra space is required.
method 2:
1)count the numberof 0's , 1's , 2's by using 3 variables and incrementing them.
2) now store all the 0s in the beginning followed by all the 1s then all the 2s.
implementation in c++:
void sortArr(int arr[], int n)
{
int i, cnt0 = 0, cnt1 = 0, cnt2 = 0;
// Count the number of 0s, 1s and 2s in the array
for (i = 0; i < n; i++) {
switch (arr[i]) {
case 0:
cnt0++;
break;
case 1:
cnt1++;
break;
case 2:
cnt2++;
break;
}
}
// Update the array
i = 0;
// Store all the 0s in the beginning
while (cnt0 > 0) {
arr[i++] = 0;
cnt0--;
}
// Then all the 1s
while (cnt1 > 0) {
arr[i++] = 1;
cnt1--;
}
// Finally all the 2s
while (cnt2 > 0) {
arr[i++] = 2;
cnt2--;
}
}
- Time Complexity: O(n).
Only two traversals of the array is needed. - Space Complexity: O(1).
As no extra space is required.
No comments