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 相关文章推荐
php一个找二层目录的小东东
Aug 02 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
php实现的树形结构数据存取类实例
Nov 29 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
php类常量用法实例分析
Jul 09 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
php批量删除操作(数据访问)
May 23 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
PHP文件缓存类实现代码
2015/10/26 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
利用javascript查看html源文件
2006/11/08 Javascript
FLASH 广告之外的链接
2008/12/16 Javascript
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
vue项目环境变量配置的实现方法
2018/10/12 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
node后端服务保活的实现
2019/11/10 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python复制文件操作实例详解
2015/11/10 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
企业道德讲堂实施方案
2014/03/19 职场文书
借款协议书
2014/04/12 职场文书
入股协议书范本
2014/04/14 职场文书
减负增效提质方案
2014/05/23 职场文书
中国梦口号
2014/06/13 职场文书
效能风暴心得体会
2014/09/04 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
财务审计整改报告
2014/11/06 职场文书
2014年教育工作总结
2014/11/26 职场文书
股东出资协议书
2016/03/21 职场文书
Vue.Draggable实现交换位置
2022/04/07 Vue.js