How to sort an array of 0s, 1s and 2s in PHP

1 Answer

0 votes
function sort012Array(&$arr) {
    $lo = 0;
    $curr = 0;
    $hi = count($arr) - 1;
        
    while ($curr <= $hi) {
        switch ($arr[$curr]) {
            case 0:
                list($arr[$lo], $arr[$curr]) = array($arr[$curr], $arr[$lo]);
                $lo++;
                $curr++;
                break;
            case 1:
                $curr++;
                break;
            case 2:
                list($arr[$curr], $arr[$hi]) = array($arr[$hi], $arr[$curr]);
                $hi--;
                break;
        }
    }
}


$arr = array(1, 2, 2, 0, 1, 1, 0, 2, 0, 1, 0, 0, 1);
        
sort012Array($arr);

for ($i = 0; $i < count($arr); $i++) {
    echo $arr[$i] . " ";
}





/*
run:

0 0 0 0 0 1 1 1 1 1 2 2 2 

*/

 



answered Apr 20, 2023 by avibootz

Related questions

1 answer 119 views
1 answer 137 views
1 answer 138 views
1 answer 146 views
2 answers 147 views
147 views asked Apr 19, 2023 by avibootz
1 answer 124 views
1 answer 128 views
...