三色旗算法

<?php

$arr = array('r', 'b', 'w', 'b', 'b', 'w', 'r', 'w', 'r', 'r', 'b', 'w');
echo implode('--', $arr). "\n";
$wFlag = $bFlag = 0;
$rFlag = count($arr) - 1;
while($wFlag <= $rFlag){
    if($arr[$wFlag] == 'w'){
        $wFlag ++;
    }elseif($arr[$wFlag] == 'b'){
        swap($arr, $wFlag, $bFlag);
        $wFlag++;
        $bFlag++;
    }else{
        while($wFlag < $rFlag && $arr[$rFlag] == 'r'){
            $rFlag--;
        }
        swap($arr, $wFlag, $rFlag);
        $rFlag--;
    }
}

echo implode('--', $arr). "\n";

function swap(&$arr, $x, $y){
    $temp = $arr[$x];
    $arr[$x] = $arr[$y];
    $arr[$y] = $temp;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章