PHP实现的二分查找算法实例分析


Posted in PHP onDecember 19, 2017

本文实例讲述了PHP实现的二分查找算法。分享给大家供大家参考,具体如下:

二分查找法需要数组是一个有序的数组

假设我们的数组是一个递增的数组,首先我们需要找到数组的中间位置.

一。要知道中间位置就需要知道起始位置和结束位置,然后取出中间位置的值来和我们的值做对比。
二。如果中间值大于我们的给定值,说明我们的值在中间位置之前,此时需要再次二分,因为在中间之前,所以我们需要变的值是结束位置的值,此时结束位置的值应该是我们此时的中间位置。
三。反之,如果中间值小于我们给定的值,那么说明给定值在中间位置之后,此时需要再次将后一部分的值进行二分,因为在中间值之后,所以我们需要改变的值是开始位置的值,此时开始位置的值应该是我们此时的中间位置,直到我们找到指定值。
四。或者中间值等于最初的起始位置,或结束位置(此时说明给定值未找到),下面我们来用代码实现~

//循环实现
function getValue($num,$arr)
{
//查找数组的中间位置
$length=count($arr);
$start=0;
$end=$length;
$middle=floor(($start+$end)/2);
//循环判断
while($start>$end-1)
{
if($arr[middle]==$num)
{
return middle+1;
}elseif($arr[middle]<$num)
{
//如果当前要查找的值比当前数组的中间值还要打,那么意味着该值在数组的后半段
//所以起始位置变成当前的middle的值,end位置不变。
$start=$middle;
$middle=floor(($start+$end)/2);
}else{
//反之
$end=$middle;
$middle=floor(($start+$end)/2);
}}
return false;
}
//循环实现
function getValue($num,$arr)
{
//查找数组的中间位置
$length=count($arr);
$start=0;
$end=$length;
$middle=floor(($start+$end)/2);
//循环判断
while($start>$end-1)
{
if($arr[middle]==$num)
{
return middle+1;
}elseif($arr[middle]<$num)
{
//如果当前要查找的值比当前数组的中间值还要打,那么意味着该值在数组的后半段
//所以起始位置变成当前的middle的值,end位置不变。
$start=$middle;
$middle=floor(($start+$end)/2);
}else{
//反之
$end=$middle;
$middle=floor(($start+$end)/2);
}}
return false;
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
第十二节--类的自动加载
Nov 16 PHP
PHP学习资料汇总与网址
Mar 16 PHP
require(),include(),require_once()和include_once()区别
Mar 27 PHP
php 文件状态缓存带来的问题
Dec 14 PHP
php读取html并截取字符串的简单代码
Nov 30 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
PHP中使用imagick生成PSD文件缩略图教程
Jan 26 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
php用xpath解析html的代码实例讲解
Feb 14 PHP
PHP实现git部署的方法教程
Dec 19 #PHP
PHP递归实现快速排序的方法示例
Dec 18 #PHP
Laravel框架中自定义模板指令总结
Dec 17 #PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 #PHP
PHP7下协程的实现方法详解
Dec 17 #PHP
浅谈PHP实现大流量下抢购方案
Dec 15 #PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 #PHP
You might like
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
PHP cdata 处理(详细介绍)
2013/07/05 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
php header函数的常用http头设置
2015/06/25 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
Python 列表list使用介绍
2014/11/30 Python
以一段代码为实例快速入门Python2.7
2015/03/31 Python
python中使用序列的方法
2015/08/03 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
在什么时候需要使用"常引用"
2015/12/31 面试题
求职信格式范本
2013/11/15 职场文书
师说教学反思
2014/02/07 职场文书
大学生党员承诺书
2014/05/20 职场文书
教师岗位职责范本
2015/04/02 职场文书
培训通知
2015/04/17 职场文书