첫 번째 방법:
[이진 검색 요구 사항]: 1. 순차적 저장 구조를 사용해야 합니다. 2. 키워드의 크기에 따라 순서대로 배열해야 합니다.
【장점 및 단점】반감 검색 방법의 장점은 비교 횟수가 적고 검색 속도가 빠르며 평균 성능이 좋다는 점입니다. 어렵다. 따라서 이진 검색 방법은 자주 변경되지 않지만 자주 검색되는 정렬된 목록에 적합합니다.
[알고리즘 아이디어] 먼저 테이블의 중간 위치에 기록된 키워드를 검색 키워드와 비교하여 둘이 같으면 검색에 성공하고, 그렇지 않으면 중간 위치 기록을 사용하여 테이블을 두 개의 하위로 나눕니다. -테이블, 첫 번째 및 마지막. 중간 위치 레코드인 경우 기록된 키워드가 검색 키워드보다 크면 이전 하위 테이블을 추가로 검색하고, 그렇지 않으면 다음 하위 테이블을 추가로 검색합니다.
<?php //正向排序的数组 $arr=array(1,3,5,7,9,11); //逆向排序的数组 $arr2=array(11,9,7,5,3,1); //对正向排序的数组进行二分查找 function searchpart($arr,$x){ $start=0; $end=count($arr)-1; while($start<=$end){ $mid=intval(($start+$end)/2);//这里只需要保证中间项下标的计算值为整数即可,也可以四舍五入,不影响结果 if($arr[$mid]>$x){//如果中间项的值大于待查值,说明代差值位于中间项的左边,因此,起始下标不变,结束下标变成中间项下标减1,第一次搜索的是$arr[0]-$arr[5]的话,下一次搜索 $end=$mid-1;//$arr[0]-$arr[1] }elseif($arr[$mid]<$x){//如果中间项的值小于待查值,说明代差值位于中间项的右边,因此,结束下标不变,起始下标变成中间项下标加1,第一次搜索的是$arr[0]-$arr[5]的话,下一//次搜索是,$arr[3]-$arr[5] $start=$mid+1; }else{//找到了,返回待查值下标 return $mid; } } } //对逆向排序的数组进行二分查找 function searchpart2($arr,$x){ $start=0; $end=count($arr)-1; while($start<=$end){ $mid=intval(($start+$end)/2);//这里只需要保证中间项下标的计算值为整数即可,也可以四舍五入,不影响结果 if($arr[$mid]>$x){//如果中间项的值大于待查值,说明代差值位于中间项的右边,因此,结束下标不变,起始下标变成中间项下标加1,第一次搜索的是$arr[0]-$arr[5]的话,下一次搜索 $start=$mid+1;//$arr[3]-$arr[5] }elseif($arr[$mid]<$x){//如果中间项的值小于待查值,说明代差值位于中间项的左边,因此,起始下标不变,结束下标变成中间项下标减1,第一次搜索的是$arr[0]-$arr[5]的话,下一//次搜索是,$arr[0]-$arr[1] $end=$mid-1; }else{//找到了,返回待查值下标 return $mid; } } } echo searchpart2($arr,5).'<br>'; echo searchpart2($arr2,5); ?>
PHP에서 이진 검색 알고리즘 구현
최근에는 이전에 배운 알고리즘 지식을 정리했습니다. 비록 WEB 개발에서는 거의 사용되지 않지만 여전히 유용한 알고리즘을 백업합니다.
반 탐색 방법은 이진 탐색 방법이라고도 하며 요소 간의 순서 관계를 최대한 활용하고 분할 정복 전략을 채택하여 O(log n)에서 탐색 작업을 완료할 수 있습니다. 최악의 경우.
[기본 아이디어]
n 요소를 대략 같은 수의 두 부분으로 나누고, a[n/2]를 찾으려는 x와 비교하고, x=a[n/2]이면 x를 찾습니다. 알고리즘이 종료됩니다. xa[n/2]이면 배열 a의 오른쪽 절반에서 x를 계속 검색하면 됩니다.
이진 검색 방법은 매우 널리 사용되며 그 아이디어는 이해하기 쉽습니다. 최초의 이진 검색 알고리즘은 1946년에 등장했지만 완전히 정확한 최초의 이진 검색 알고리즘은 1962년에야 나타났습니다. Bentley는 자신의 저서 "Writing Correct Programs"에서 컴퓨터 전문가의 90%가 2시간 이내에 완전히 올바른 이진 검색 알고리즘을 작성할 수 없다고 썼습니다. 문제의 핵심은 각 검색 범위의 경계를 정확하게 공식화하고 종료 조건을 결정하며 홀수와 짝수의 다양한 상황을 정확하게 요약하는 것입니다. 실제로 정리해보면 그 구체적인 알고리즘이 매우 훌륭하다는 것을 알 수 있습니다. 직관적이다.
PHP에서 이진 검색 알고리즘 구현
/** * 二分查找算法 * * @param array $arr 有序数组 * @param int $val 查找的数值 * @return int 查找值存在返回数组下标,不存在返回-1 */ function binary_search($arr,$val) { $l = count($arr);//获得有序数组长度 $low = 0; $high = $l -1; while($low <= $high) { $middle = floor(($low + $high) / 2); if($arr[$middle] == $val) { return $middle; } elseif($arr[$middle] > $val) { $high = $middle - 1; } else { $low = $middle + 1; } } return -1; } //示例 $arr = array(1,2,3,4,5,6,7,8,9,12,23,33,35,56,67,89,99); echo binary_search($arr,57);
PHP를 사용하여 이진 검색 알고리즘을 구현하는 더 많은 코드 공유를 보려면 PHP 중국어 웹사이트를 주목하세요!