이 글에서는 주로 PHP 반(이등분) 검색 알고리즘을 소개하며, PHP 반(이등분) 검색 알고리즘의 개념, 원리, 구현 및 사용법을 예제 형식으로 자세히 분석합니다. ) 검색. 알고리즘 카테고리는 참고용입니다. 필요하신 분들은 참고하시면 됩니다.
이 글에서는 PHP 반(이등분) 검색 알고리즘을 예로 설명합니다. 참고용으로 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
반쪽 쿼리는 양수 또는 역순으로 정렬된 배열, 문자열 등에 대해서만 적용됩니다.
알고리즘:
먼저 중간을 선택하세요. 배열의 위치, 중간 위치가 없으면 반올림합니다.
가운데를 반으로 접어서 크기를 판단하고 전반부 또는 후반부를 입력합니다.
그런 다음 첫 번째 부분에서 동일한 절반 쿼리를 수행합니다. 반 또는 후반,
일치하는 문자를 찾을 때까지 멈추지 마십시오. (이 예에서는 break를 사용했습니다. 함수에 배치하면 return을 사용할 수 있습니다.)
php에서 구현한 코드는 다음과 같습니다. 다음:
<?php $arr = array(1,2,3,4,5,6,7,8,9,10);//数组 $key = 4;//要查询的关键字 $low = 0;//开始位的标志 $high = count($arr);//终止位的标志 while($low <= $high){//查询开始结束的条件 $mid = floor(($low + $high)/2);//进行中间位置计算,向下取整 if($arr[$mid] == $key){//查询成功 echo $arr[$mid]; break;//结束本页执行,函数可用return }elseif($arr[$mid] > $key){ //查询前半段,把结束标志移到中间位置前一位 $high = $mid - 1; }else{ //查询后半段,把开始位置移到中间位置的后一位 $low = $mid + 1; } } /* 运行结果:4 */ ?>
추가: 절반(이등분) 검색 알고리즘 클래스:
/** * Description:php实现二分查找算法的类 * @author wzy */ class binary_search{ public $arr; public $key; function __construct($arr,$key){ //这里初始化的数组已经是有序数组 $this->arr=$arr; $this->key=$key; } function binarysearch(){ $start=0; $end=count($this->arr)-1; while($start<=$end){ //mid的取值可以为上整数或者下整数 $mid=ceil(($start+$end)/2); //$mid=($start+$end)>>1; //$mid=intval(($start+$end)/2); if($this->arr[$mid]<$this->key){ $start=$mid+1; }else if($this->arr[$mid]>$this->key){ $end=$mid-1; }else{ return $mid; } } } }
이 상황이 발생할 수도 있습니다. 반환되는 위치는 중복 데이터의 첫 번째 요소 위치입니다. 예를 들어
$arr=array(1,2,3,4,5,6,6,6,6,7,8);
가 요소 6을 검색하는 경우 반환되는 위치는 5여야 하며 다른 값은 없어야 합니다(아래 첨자는 0부터 계산되기 시작함). 반환된 mid를 기준으로 판단해야 합니다. 코드는 다음과 같습니다.
/** * Description:php实现二分查找算法的类 * @author wzy */ class binary_search{ public $arr; public $key; function __construct($arr,$key){ //这里初始化的数组已经是有序数组 $this->arr=$arr; $this->key=$key; } function binarysearch(){ $start=0; $end=count($this->arr)-1; while($start<=$end){ //mid的取值可以为上整数或者下整数 $mid=ceil(($start+$end)/2); //$mid=($start+$end)>>1; //$mid=intval(($start+$end)/2); if($this->arr[$mid]<$this->key){ $start=$mid+1; }else if($this->arr[$mid]>$this->key){ $end=$mid-1; }else{ //返回第一个匹配的元素 for($i=$mid-1;$i>=0;$i--){ if($this->arr[$i]==$this->key){ $mid=$i; }else{ break; } } return $mid; } } } }
위 내용은 PHP 반(이등분) 검색 알고리즘 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!