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 相关文章推荐
MySQL中create table语句的基本语法是
Jan 15 PHP
php强制更新图片缓存的方法
Feb 11 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
PHP 7.0.2 正式版发布
Jan 08 PHP
详谈php静态方法及普通方法的区别
Oct 04 PHP
thinkphp下MySQL数据库读写分离代码剖析
Apr 18 PHP
PHP工厂模式简单实现方法示例
May 23 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP基于PDO扩展操作mysql数据库示例
Dec 24 PHP
PHP中的异常处理机制深入讲解
Nov 10 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 16 PHP
详解Laravel制作API接口
May 31 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 魔兽争霸
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
Vue中props的详解
2019/05/16 Javascript
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
python 发送json数据操作实例分析
2019/10/15 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
parser.add_argument中的action使用
2020/04/20 Python
python解释器安装教程的方法步骤
2020/07/02 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
思想道德自我评价2015
2015/03/09 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
Redis入门教程详解
2021/08/30 Redis
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript