当前位置: 首页 > 后端技术 > PHP

PHP基本二分查找代码实现

时间:2023-03-30 00:20:52 PHP

原文链接:何晓东技术博客基本二分查找是:在一组有序的集合中,找到指定的值,稍微扩展一下就是指定的值在集合中出现多次,你需要查询first第一次出现的位置还是最后一次出现的位置。这分三种情况进行讨论。维基百科对二分查找的定义:查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过程结束;如果特定元素大于或小于中间元素,则在大于或小于中间元素的数组中查找的一半,并从中间元素开始比较。如果在某一步数组为空,则表示找不到。这种搜索算法每次比较都会将搜索范围缩小一半。不重复值搜索functionbinarySearch($nums,$target){$left=0;$right=count($nums)-1;while($left<=$right){$mid=(int)($left+($right-$left)/2);//防止left+right整数溢出if($nums[$mid]==$target){return$mid;//如果匹配则返回}elseif($nums[$mid]>$target){$right=$mid-1;}elseif($nums[$mid]<$target){$left=$mid+1;}}返回-1;}返回binarySearch([-1,0,3,5,9,12],9);//输出:4求指定值的左边界functionbinarySearch($nums,$target){$left=0;$right=count($nums)-1;while($left<=$right){$mid=(int)($left+($right-$left)/2);如果($nums[$mid]==$target){$right=$mid-1;//向左锁定,向右移动边界}elseif($nums[$mid]>$target){$right=$mid-1;}elseif($nums[$mid]<$target){$left=$mid+1;}}如果($left>=count($nums)||$nums[$left]!=$target)返回-1;返回$left;}返回binarySearch([-1,0,3,5,9,9,9,12],9);//输出:4找到指定值的右边界functionbinarySearch($nums,$target){$left=0;$right=count($nums)-1;while($left<=$right){$mid=(int)($left+($right-$left)/2);如果($nums[$mid]==$target){$left=$mid+1;//向右锁定,向左移动边框}elseif($nums[$mid]>$target){$right=$mid-1;}elseif($nums[$mid]<$target){$left=$mid+1;}}if($right<0||$nums[$right]!=$target)返回-1;返回$right;}returnbinarySearch([-1,0,3,5,9,9,9,12],9);//output:6参考链接:二分查找解题框架思路,强烈推荐本站作者