>  기사  >  php教程  >  PHP 이진 검색 알고리즘 예제 [재귀적 및 비재귀적 방법]

PHP 이진 검색 알고리즘 예제 [재귀적 및 비재귀적 방법]

高洛峰
高洛峰원래의
2016-12-21 13:51:311172검색

이 기사의 예에서는 PHP 바이너리 검색 알고리즘을 설명합니다. 참고할 수 있도록 자세한 내용은 다음과 같습니다.

binarySearch

이진 검색에서 사용하는 방법은 비교적 이해하기 쉽습니다. 배열을 예로 들어 보겠습니다. 🎜>① 먼저 배열의 중앙((low+top)/2)에 있는 값을 취하고,

② 찾으려는 숫자와 비교하여 중간 값보다 큰지 확인합니다. , 첫 번째 값을 중간 위치로 바꾸고 첫 번째 단계를 계속합니다. 중간 값보다 작으면 꼬리 값을 중간 위치 위의 위치로 바꾸고 첫 번째 단계를 계속합니다.

③ 원하는 숫자를 찾을 때까지 두 번째 단계를 반복

예를 들어 1, 3, 9, 23, 54에서 숫자 23을 찾습니다.

의 첫 번째 위치는 0이고, 마지막 위치는 4이고 중간 위치는 2입니다. 값이 23보다 작은 9이면 첫 번째 위치는 2로 업데이트됩니다. +1은 3이면 중간 위치는 (3+4)/2=입니다. 3이고 값은 23입니다. 값이 같으면

//  非递归算法:
//  $target是要查找的目标 $arr是已经排序好的数组
function binary(&$arr,$low,$top,$target){
    while($low <= $top){
//由于php取商是有小数的,所以向下取整,不过也可不加,数组也会取整
      $mid = floor(($low+$top)/2);
      echo $mid."<br>";
      if($arr[$mid]==$target){
        return $arr[$mid];
      }elseif($arr[$mid]<$target){
        $low = $mid+1;
      }else{
        $top = $mid-1;
      }
    }
    return -1;
}

//  递归算法:
function binaryRecursive(&$arr,$low,$top,$target){
    if($low<=$top){
      $mid = floor(($low+$top)/2);
      if($mid==$target){
        return $arr[$mid];
      }elseif($arr[$mid]<$target){
        return binaryRecursive($arr,$mid+1,$top,$target);
      }else{
        return binaryRecursive($arr,$low,$top-1,$target);
      }
    }else{
      return -1;
    }
}

이 기사가 되길 바랍니다. PHP 프로그래밍에 종사하는 모든 사람에게 도움이 될 것입니다.

더 많은 PHP 이진 검색 알고리즘 예제[재귀 및 비재귀 방법] 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.