/**
* 快速找到第k大的数
*/
function fastGetK($arr, $k) {
$key = array_rand ( $arr );
$val0 = $arr [$key];
unset ($arr [$key]);
$left = array ();
$right = array ();
foreach ( $arr as $keyv => $val ) {
//if($keyv==$key) continue;
if ($val0 < $val) {
$right [] = $val;
} else {
$left [] = $val;
}
}
$lenr = count ( $right );
$lenl = count ( $left );
if ($lenr > $k - 1) {
return fastGetK ( $right, $k );
} elseif ($lenr == $k - 1) {
return $val0;
} else {
return fastGetK ( $left, $k - $lenr - 1 );
}
}
转载于:https://www.cnblogs.com/anjianliang/archive/2011/08/16/2141322.html