PHP二分法查找
- 原理: 在一个有序数组中查找某一个元素选择该元素的中间一个元素进行查找
- 注意:查找的目标数组必须为有序数组
/**
*@zhu
* @parmeter:$left_index最左边下标
* @parmeter:$right_index最右边下标
* @parmeter:$find_val查找的值
* @parmeter:$arr要查找的数组
*/
function search($left_index , $right_index , $arr , $find_val)
{
//如果$left_index > $right_index则证明数组中没有目标元素
if($left_index > $right_index)
{
echo "目标数据不存在!";
return;
}
//找的数组的中间值进行比较
//找到数组的中间值(如果数组元素为奇数个则取整)
$middle_index=round(($left_index + $right_index) / 2);
if($arr[$middle_index] == $find_val)
{
//当查找的数据正好为中间数
echo "找到目标数据,数据下标为".$middle_index."<br>".$arr[$middle_index];
return;
}
elseif($arr[$middle_index] < $find_val)
{
//如果目标数据大于中间数据则在中间数据的右边进行查找
search($middle_index + 1 , $right_index , $arr , $find_val);
}
elseif($arr[$middle_index] >$find_val)
{
//如果目标数据小于中间数据则在中间数据的左边进行查找
search($left_index , $middle_index - 1, $arr , $find_val);
}
}
$arr = array(1,2,3,4,5,6,7,8,9,10,11,12);
search(0 , count($arr) - 1 , $arr , 10);