//二分查找法 第一种方法
function erfen($x,$arr){
$count=count($arr);
$s=0;
$h=$count-1;
while ( $s<= $h) {
$middle=intval(($s+$h)/2);
if($arr[$middle]>$x){
$h=$middle-1;
}elseif($arr[$middle]<$x){
$s=$middle+1;
}else{
return $middle;
}
}
return -1;
}
$x=8;
$arr=array(0,1,2,3,4,5,6,8,9);
$aaa=erfen($x,$arr);
echo $aaa;
//第二种方法
function binarySearch(&$array,$findVal,$leftIndex,$rightIndex){
$middleIndex=round(($rightIndex+$leftIndex)/2);
if($leftIndex>$rightIndex){
echo'查无此数<br/>';
return;
}
if($findVal>$array[$middleIndex]){
binarySearch($array,$findVal,$middleIndex+1,$rightIndex);
}elseif($findVal<$array[$middleIndex]){
binarySearch($array,$findVal,$leftIndex,$middleIndex-1);
}else{
echo"找到数据:index=$middleIndex;value=$array[$middleIndex]<br/>";
if($array[$middleIndex+1]==$array[$middleIndex]&&$leftIndex<$rightIndex){
binarySearch($array,$findVal,$middleIndex+1,$rightIndex);
}
if($array[$middleIndex-1]==$array[$middleIndex]&&$leftIndex<$rightIndex){
binarySearch($array,$findVal,$leftIndex,$middleIndex-1);
}
}
}
$x=8;
$arr=array(0,1,2,3,4,5,6,8,9);
$count=count($arr);
$s=0;
$h=$count-1;
$aaa=binarySearch($arr,$x,$s,$h);
echo $aaa;
//顺序查找法
function seq_sch($array, $n, $k){
for($i=0; $i<$n; $i++){
if($array[$i]==$k){
break;
}
}
if ($i<$n){
return $i;
}else{
return -1;
}
}
$x=8;
$arr=array(0,1,2,3,4,5,6,8,9);
count=count($arr);
$aaa=seq_sch($arr,,$count,$x);
echo $aaa;