手记

快速排序非递归

快速排序-非递归

function FindPv(&$arr, $s, $e){

    $p = $s; //基准起始位置

    $v = $arr[$p];  //将数组的第一个值作为基准值

    while($s <$e){

        while($arr[$e]>$v&&$e>$p){

            $e--;

        }

        $arr[$p] = $arr[$e];

        $p = $e;

        while($arr[$s]<$v&&$s<$p){

            $s++;

        }

        $arr[$p] = $arr[$s];

        $p = $s;

    }

    $arr[$p] = $v;

    return $p;

}

function PvSort(&$arr){

    $stack = array();

    array_push($stack,array(0,count($arr)-1));//初始化

    while(count($stack)>0){

        $temp = array_pop($stack);

        $p = FindPv($arr, $temp[0], $temp[1]);

        if($p+1<$temp[1]) array_push($stack,array($p+1,$temp[1]));

        if($temp[0]<$p-1) array_push($stack,array($temp[0],$p-1));

    }

}

$arr = array(10,6,8,23,4,1,17,56,32,50,11,9);//12个数

echo '<pre>';

PvSort($arr);

print_r($arr);
0人推荐
随时随地看视频
慕课网APP