PHP Program to Sort an Array of 0s, 1s and 2s
Last Updated :
22 Jul, 2024
Given an array A[] consisting 0s, 1s and 2s. The task is to write a function that sorts the given array. The functions should put all 0s first, then all 1s and all 2s in last.
Examples:
Input: [0, 1, 2, 0, 1, 2]
Output: [0, 0, 1, 1, 2, 2]
Input: [0, 1, 1, 0, 1, 2, 1, 2, 0, 0, 0, 1]
Output: [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2]
A simple solution is discussed in this(Sort an array of 0s, 1s and 2s (Simple Counting)) post.
Approach to Sort an Array of 0s, 1s and 2s
The problem is similar to our old post, Segregate 0s and 1s in an array, and both of these problems are variation of famous Dutch national flag problem. The problem was posed with three colours, here `0', `1' and `2'. The array is divided into four sections:
- a[1..Lo-1] zeroes (red)
- a[Lo..Mid-1] ones (white)
- a[Mid..Hi] unknown
- a[Hi+1..N] twos (blue)
- If the ith element is 0 then swap the element to the low range, thus shrinking the unknown range.
- Similarly, if the element is 1 then keep it as it is but shrink the unknown range.
- If the element is 2 then swap it with an element in high range.
Algorithm
- Keep three indices low = 1, mid = 1 and high = N and there are four ranges, 1 to low (the range containing 0), low to mid (the range containing 1), mid to high (the range containing unknown elements) and high to N (the range containing 2).
- Traverse the array from start to end and mid is less than high. (Loop counter is i)
- If the element is 0 then swap the element with the element at index low and update low = low + 1 and mid = mid + 1
- If the element is 1 then update mid = mid + 1
- If the element is 2 then swap the element with the element at index high and update high = high - 1 and update i = i - 1. As the swapped element is not processed
- Print the output array.
Dry Run
Part way through the process, some red, white and blue elements are known and are in the "right" place. The section of unknown elements, a[Mid..Hi], is shrunk by examining a[Mid].

Examine a[Mid]. There are three possibilities:
a[Mid] is (0) red, (1) white or (2) blue.
Case (0) a[Mid] is red, swap a[Lo] and a[Mid]; Lo++; Mid++

Case (1) a[Mid] is white, Mid++

Case (2) a[Mid] is blue, swap a[Mid] and a[Hi]; Hi--

Continue until Mid>Hi.
PHP
// PHP program to sort an array
// with 0, 1 and 2 in a single pass
// Sort the input array, the array is
// assumed to have values in {0, 1, 2}
function sort012(&$a, $arr_size) {
$lo = 0;
$hi = $arr_size - 1;
$mid = 0;
while ($mid <= $hi) {
switch ($a[$mid]) {
case 0:
swap($a[$lo++], $a[$mid++]);
break;
case 1:
$mid++;
break;
case 2:
swap($a[$mid], $a[$hi--]);
break;
}
}
}
// Utility functions
function swap(&$a, &$b) {
$temp = $a;
$a = $b;
$b = $temp;
}
/* Utility function to print
array arr[] */
function printArray(&$arr, $arr_size) {
for ($i = 0; $i < $arr_size; $i++)
echo $arr[$i]." ";
echo "";
}
// Driver Code
$arr = array(0, 1, 1, 0, 1, 2,
1, 2, 0, 0, 0, 1);
$arr_size = sizeof($arr);
sort012($arr, $arr_size);
echo "Array Sorting: ";
printArray($arr, $arr_size);
?>
OutputArray Sorting: 0 0 0 0 0 1 1 1 1 1 2 2
Complexity Analysis: Please refer complete article on Sort an array of 0s, 1s and 2s for more details!Time Complexity: O(n). Only two traversals of the array is needed.
Space Complexity: O(1). As no extra space is required.
Similar Reads
PHP Program to Count 1's in a sorted binary array Given a binary array sorted in non-increasing order, count the number of 1's in it. Examples: Input: arr[] = {1, 1, 0, 0, 0, 0, 0}Output: 2Input: arr[] = {1, 1, 1, 1, 1, 1, 1}Output: 7Input: arr[] = {0, 0, 0, 0, 0, 0, 0}Output: 0A simple solution is to linearly traverse the array. The time complexit
2 min read
PHP Program to Sort an Array in Ascending Order Sorting array elements is a common operation in programming. PHP provides several methods to achieve this operation. In this article, we will explore various approaches to sort array elements of an array in ascending order.Table of ContentUsing sort() FunctionUsing asort() FunctionUsing array_multis
3 min read
PHP Program for Check if an array is sorted and rotated Given an array of N distinct integers. The task is to write a program to check if this array is sorted and rotated counter-clockwise. A sorted array is not considered as sorted and rotated, i.e., there should at least one rotation.Examples: Input : arr[] = { 3, 4, 5, 1, 2 }Output : YESThe above arra
3 min read
PHP Program to Merge two Sorted Arrays Given two sorted arrays, i.e. arr1, and arr2, the task is to merge both sorted arrays and make a single sorted array. Examples:Input: arr1 = [1, 3, 5, 7, 8] arr2 = [2, 3, 4, 5, 6] Output: [1, 2, 3, 3, 4, 5, 6, 7, 8]Below are the methods to merge both arrays:Table of ContentUsing LoopUsing array_merg
3 min read
PHP Program to Sort Names in an Alphabetical Order Sorting names in alphabetical order is a common task in programming. PHP provides several functions and methods to achieve this. Examples: Input: arr = ["Sourabh", "Anoop, "Harsh", "Alok", "Tanuj"]Output: ["Alok", "Anoop", "Harsh", "Sourabh", "Tanuj"]Input: arr = ["John", "Alice", "Bob", "Eve", "Cha
2 min read
PHP Program to Split Array and Add First Part to the End | Set 2 Given an array, the task is to split it from a specified position, and move the first part of array and add to the end. Examples: Input : Arr = [ 12, 10, 5, 6, 52, 36 ] k = 2 Output : Arr = [ 5, 6, 52, 36, 12, 10 ] Explanation : Split from index 2 and first part {12, 10} add to the end. Input : Arr
2 min read
PHP Program to Move All Zeroes to End of Array Given an array of random numbers, Push all the zero's of a given array to the end of the array. For example, if the given arrays is {1, 9, 8, 4, 0, 0, 2, 7, 0, 6, 0}, it should be changed to {1, 9, 8, 4, 2, 7, 6, 0, 0, 0, 0}. The order of all other elements should be same. Expected time complexity i
3 min read
PHP Program to Sort an Array Elements in Descending Order Given an array containing some elements, the task is to sort the array elements in descending order in PHP. Sorting elements of an array is a common operation in programming, and PHP provides several methods to accomplish this task.Table of ContentUsing rsort() FunctionUsing array_reverse() with sor
3 min read
PHP Program for Insertion Sort Insertion sort is a simple and efficient sorting algorithm that builds the final sorted array one element at a time. Insertion sort provides several advantages such as simple implementation, efficient for small data sets, and more efficient in practice than most other simple quadratic algorithms lik
2 min read
PHP Program to Find the smallest missing number Given a sorted array of n distinct integers where each integer is in the range from 0 to m-1 and m > n. Find the smallest number that is missing from the array. Examples: Input: {0, 1, 2, 6, 9}, n = 5, m = 10 Output: 3Input: {4, 5, 10, 11}, n = 4, m = 12 Output: 0Input: {0, 1, 2, 3}, n = 4, m = 5
3 min read