PHP는 이진 검색 방법을 구현합니다
이진 검색 방법에 필요한 배열은 순서 배열이라고 가정합니다. 우리의 배열은 증가하는 배열이므로 먼저 배열의 중간 위치를 찾아야 합니다.
1. 중간 위치를 알려면 시작 위치와 끝 위치를 알아야 하고, 중간 위치의 값을 꺼내어 우리 값과 비교해야 합니다.
2. 중간값이 주어진 값보다 크다면, 이때 우리의 값은 중간 위치 이전이기 때문에 다시 둘로 나누어야 한다는 뜻입니다. 중간이므로 변경해야 할 값은 끝 위치 값이며, 이때 끝 위치의 값은 이때 중간 위치여야 합니다.
3 반대로 중간 값이 우리가 주는 값보다 작다면, 이때 주어진 값은 중간 위치 이후에 있다는 뜻입니다. 중간 값 이후에 변경해야 할 값은 시작 위치의 값이므로 다시 두 부분으로 나눕니다. 이 값은 지정된 값을 찾을 때까지 현재 중간 위치여야 합니다.
4. 또는 중간값이 초기 시작 위치 또는 끝 위치와 같습니다(이 경우 지정된 값을 찾을 수 없습니다)
아래 코드를 사용해 보겠습니다. 구현
1. 루프 구현function getValue($num,$arr)
{
//查找数组的中间位置
$length=count($arr);
$start=0;
$end=$length;
$middle=floor(($start+$end)/2);
//循环判断
while($start>$end-1)
{
if($arr[middle]==$num)
{
return middle+1;
}elseif($arr[middle]<$num)
{
//如果当前要查找的值比当前数组的中间值还要打,那么意味着该值在数组的后半段
//所以起始位置变成当前的middle的值,end位置不变。
$start=$middle;
$middle=floor(($start+$end)/2);
}else{
//反之
$end=$middle;
$middle=floor(($start+$end)/2);
}}
return false;
}
/* * 从数组中获取元素值 * @param1 int $num,要查找的目标值 * @param2 array $arr,要查找的数组 * @param3 int $start,查找的起始位置 * @param4 int $end,查找的结束位置 * @return mixed,找到了返回位置,没找到返回false */ function getValue4($num,$arr,$start = 0,$end = 100){ //采用二分法查找 $middle = floor(($end + $start) / 2); //判断 if($arr[$middle] == $num){ //已经找到了,递归的出口 return $middle + 1; }elseif($arr[$middle] < $num){ //要查找的元素在数组的后半段 $start = $middle + 1; //边界值 if($start >= $end){ //没有找到,但是已经超出边界值,递归出口 return false; } //调用自己去查找:递归点 return getValue4($num,$arr,$start,$end); //getValue4($num,$arr,51,100) }else{ //要查找的元素在数组的前半段 $end = $middle - 1; //判断边界值 if($end < 0)return false; //调用自己:递归点 return getValue4($num,$arr,$start,$end); //getValue4($num,$arr,0,49) } //都没有找到 return false; }위 내용은 참고용입니다!
추천 튜토리얼: PHP 비디오 튜토리얼
위 내용은 PHP에서 이진 검색 방법을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!