二分查找的數組必須是排好序的,順序查找沒要求,php查找數組元素有內置的函數array_search和in_array
//二分查找法
function binSearch($arr,$search){
$height=count($arr)-1;
$low=0;
while($low<=$height){
$mid=floor(($low+$height)/2);//獲取中間數
if($arr[$mid]==$search){
return $mid;//返回
}elseif($arr[$mid]
$low=$mid+1;
}elseif($arr[$mid]>$search){//中間值大於所查值,則$mid右邊的所有值都大於$search,此時要將$mid賦值給$height
$height=$mid-1;
}
}
return "查找失敗";
}
//二分查找遞歸實現
function binSearch2($arr,$low,$height,$k){
if($low<=$height){
$mid=floor(($low+$height)/2);//獲取中間數
if($arr[$mid]==$k){
return $mid;
}elseif($arr[$mid]
return binSearch2($arr,$mid+1,$height,$k);
}elseif($arr[$mid]>$k){
return binSearch2($arr,$low,$mid-1,$k);
}
}
return -1;
}
//順序查找
function seqSearch($arr,$k){
foreach($arr as $key=>$val){
if($val==$k){
return $key;
}
}
return -1;
}
$arr=array(1,2,3,4);
echo binSearch($arr,4).'
';
echo binSearch2($arr,0,4,4).'
';
echo seqSearch($arr,4).'
';
echo in_array(4,$arr).'
';
echo array_search(4,$arr);