>  기사  >  백엔드 개발  >  PHP는 정렬된 배열에 특정 값이 포함되어 있는지 찾습니다(이진 검색).

PHP는 정렬된 배열에 특정 값이 포함되어 있는지 찾습니다(이진 검색).

藏色散人
藏色散人앞으로
2020-02-06 17:05:533161검색

PHP는 정렬된 배열에 특정 값이 포함되어 있는지 찾습니다(이진 검색).

질문: 정렬된 배열의 경우 주어진 값이 배열에 존재하는지 확인하는 방법입니다.

아이디어: 존재 여부를 확인하려면 가장 간단한 방법은 배열을 직접 반복하여 각 값을 비교하는 것입니다. 그러나 정렬된 배열의 경우 이와 같이 작성하면 "정렬된" 기능을 활용하는 데 완전히 실패합니다.

모두 "이진 검색"을 사용합니다.

//有序数组为
$arr = array(2,5,66,87,954,1452,5865);
//查找值
$str = 1452;
//我们先定义 三个参数
$front = 0;//一个开始值下标
$end = count($arr) - 1;//一个结束值下标
$mid = intval(($front + $end) / 2);//中间值下标

1. 첫 번째 비교에서는 검색 값 str이 중간 값 mid와 같은지 직접 확인하고 같으면 직접 true를 반환합니다. 2. 검색 값 str이 중간 값보다 큰 경우 mid 값은 검색 값 str이 중간 값의 오른쪽에 있을 수 있음을 의미합니다. 즉, 시작 값 front를 다시 할당해야 합니다 = 중간 값 mid + 1, 끝 값 end는 변경할 필요가 없으며, 중간 값 mid는 새로운 시작 값 + 끝 값이 차례로 됩니다.

3. 검색 값 str이 중간 값 mid보다 작으면 검색이 수행됨을 의미합니다. str 값은 중간 값의 왼쪽에 있을 수 있습니다. 즉, 시작 값을 변경할 필요가 없으며 끝 값 end를 다시 할당해야 합니다 = 중간 값 - 1, 중간 값 mid는 시작 값 + 새로운 종료값

----위와 같이 들어오는 시작값, 종료값, 중간값을 비교합니다. 시작 값이 종료 값보다 크면 찾을 수 없다는 의미이고, 그렇지 않으면 찾았다고 반환합니다.

구체적인 코드는 다음과 같습니다:

$str = 89;//查找值
$arr = [1,55,66,89,420];//有序数组
$ren = find($arr, $str);
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
var_dump($ren);
function find($arr, $str){
    $front = 0;//开始下标
    $end = count($arr) - 1;//结束下标
    while($front <= $end){//结束值 大于 开始值 ,反之则退出
        $mid = intval(($front + $end) / 2);//中间值下标
        if($str == $arr[$mid]){
            return $mid;//存在直接返回值的下标
        }
        if($str > $arr[$mid]){
            $front = $mid + 1;//在前面
        }
        if($str < $arr[$mid]){
            $end = $mid - 1;//在后面
        }
    }
    return false;
}

반환 결과: 89는 네 번째 요소 값 첨자 3

PHP는 정렬된 배열에 특정 값이 포함되어 있는지 찾습니다(이진 검색).추천 비디오 튜토리얼: "

php tutorial

"

위 내용은 PHP는 정렬된 배열에 특정 값이 포함되어 있는지 찾습니다(이진 검색).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제