php+求二分查找递归算法,PHP二分查找(递归和循环)

二分查找可以通过递归和循环来实现,

思路如下:

将要查找的数和中间数进行比较,

如果相等,则表示找到,返回下标

如果要查找的数小于中间这个数,则说明要查找的数分布在数组左边,修改right边界,使其等于middle-1,直接等于middle,如果查找不到,会造成死归,

如果要查找的数大于中间这个数,则说明要查找的数分布在数组的右边,修改left边界,使其等于middle+1,直接等于middle,如果查找不到,也会造成死归,

递归查找,使用一个静态变量保存下标,

没有查到,则返回-1

代码如下:

//递归二分查找

function binarySearchByRecursion($arr,$val,$left,$right){

static $index = -1;

if($left>$right){

return $index;

}

$middle = floor(($left+$right)/2);

if($val < $arr[$middle]){

//如果$middle不-1,则挑不出去,会一直递归下去

$right = $middle-1;

binarySearchByRecursion($arr,$val,$left,$right);

}elseif($val > $arr[$middle]){

$left = $middle+1;

binarySearchByRecursion($arr,$val,$left,$right);

}else{

$index = $middle;

}

return $index;

}

//循环二分查找

//

function binarySearchByLoop($arr,$val){

$index = -1;

$left = 0;

$right = count($arr)-1;

while($left <= $right ){

$middle = round(($left+$right)/2);

if($val < $arr[$middle]){

$right = $middle - 1;

}elseif($val > $arr[$middle]){

$left = $middle + 1;

}else{

$index = $middle;

break;

}

}

return $index;

}

数据结构&amp&semi;算法(二)&lowbar;算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)

什么是算法: 间而言之算法(Algorithm):一个计算过程,解决问题的方法 递归的两个特点: 调用自身 结束条件 递归示例: def func(x): : print("我的小鲤鱼&qu ...

Java实现的二分查找算法

二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...

二分查找&lpar;binary search&rpar;

二分查找又叫折半查找,要查找的前提是检索结果位于已排序的列表中. 概念 在一个已排序的数组seq中,使用二分查找v,假如这个数组的范围是[low...high],我们要的v就在这个范围里.查找的方法是 ...

二分查找(binary search)java实现及时间复杂度

概述 在一个已排序的数组seq中,使用二分查找v,假如这个数组的范围是[low...high],我们要的v就在这个范围里.查找的方法是拿low到high的正中间的值,我们假设是m,来跟v相比,如果m& ...

C&num;二分查找算法设计实现

C#二分查找算法设计实现 1.介绍 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.(记住了 ...

二分查找算法java

二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元 ...

Leecode之双指针及二分查找

题目 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的 ...

二分查找&amp&semi;二叉排序树

首先我们先来复习一下二分查找的算法 对于正向序列的二分查找 递归实现: bool binary_search(vector &sort_arry,int begin,in ...

二分查找C&plus;&plus;

#include using namespace std; //二分查找:每次都从中间位置寻找,如果找到了就返回,如果没找到, //则分两种情况: //(1)中间元素 ...

随机推荐

JavaScript对浏览器的URL进行编码、解码

关于url编码,js有三个函数.有三个解码方法,escape,encodeURI,encodeURIComponent().有三个解码方法,unescapse,decodeURI,decodeURIC ...

POI刷新数据后的函数(公式)更新问题

使用POI将Excel模板中的数据进行更新,这应该是很常见的操作 下面就贴上我的一小段代码 public class ModifyExcel { /** * @param fileName Excel ...

show&sol;hide

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值