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
*/