<?php
//二分查找法,针对有序数列
//核心思想:找到数列中间的数,与此数进行比较,如果小于中间数,则去左边的数列找,如果大于中间数,则到右边的数列找.
//参数介绍:
//$arr 查找数列所在的数组
//$findval 要查找的值
//$leftp,$rightp查找范围的左端和右端
function binary($arr,$findval,$leftp,$rightp){
//如果$leftp > $rightp,说明没有此数
if( $leftp > $rightp ){
echo "数列中没有".$findval;
return;
}
//获得中间值得下标
$midp=round(($leftp+$rightp)/2);
if( $findval < $arr[$midp] ){
binary($arr,$findval,$leftp,$midp-1);
}else if( $findval > $arr[$midp] ){
binary($arr,$findval,$midp+1,$rightp);
}else{
echo "找到了,下标是".$midp;
}
}
$arr=array(1,3,4,23,45,122,789,1000,123456);
binary($arr,1000,0,9); ?>
没有评论:
发表评论