PHP 는 어떤 값 을 포함 하 는 지 여 부 를 정렬 하 는 방법 을 찾 습 니 다.

1957 단어 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 '<pre>';

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 에서 질서 있 는 배열 이 특정한 값(2 분 검색)을 포함 하 는 지 여 부 를 찾 는 것 입 니 다.추가 사항 이 있 으 면 저희 에 게 연락 하 십시오.

좋은 웹페이지 즐겨찾기