질문: 정렬된 배열의 경우 주어진 값이 배열에 존재하는지 확인하는 방법입니다.
아이디어: 존재 여부를 확인하려면 가장 간단한 방법은 배열을 직접 반복하여 각 값을 비교하는 것입니다. 그러나 정렬된 배열의 경우 이와 같이 작성하면 "정렬된" 기능을 활용하는 데 완전히 실패합니다.
관련 학습 권장 사항: 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. 중간 값 mid는 검색 값 str이 중간 값의 왼쪽에 있을 수 있음을 의미합니다. 즉, 시작 값은 변경될 필요가 없으며 끝 값 end는 재할당 = 중간 값 - 1이어야 하며, 중간 값 mid는 시작 값 + 새 끝 값을 차례로
----위와 같이 들어오는 시작 값, 끝 값 및 중간 값을 비교합니다. 시작 값이 종료 값보다 크면 찾을 수 없다는 의미이고, 그렇지 않으면 찾았다고 반환합니다.
구체적인 코드는 다음과 같습니다:
$str = 89;//查找值 $arr = [1,55,66,89,420];//有序数组 $ren = find($arr, $str); echo '<pre class="brush:php;toolbar:false">'; 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
int(3)
관련 학습 권장 사항: 프로그래밍 비디오
위 내용은 PHP에서 순서 배열에 특정 값이 포함되어 있는지 확인하는 방법 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!