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的ob_start();控制您的浏览器cache!
Feb 14 PHP
PHP 表单提交给自己
Jul 24 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
zf框架的session会话周期及次数限制使用示例
Mar 13 PHP
destoon利用Rewrite规则设置网站安全
Jun 21 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
php实现的操作excel类详解
Jan 15 PHP
thinkPHP3.1验证码的简单实现方法
Apr 22 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
PHP回调函数概念与用法实例分析
Nov 03 PHP
Laravel 验证码认证学习记录小结
Dec 20 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
第十一节 重载 [11]
2006/10/09 PHP
也谈截取首页新闻 - 范例
2006/10/09 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
基于jquery的跨域调用文件
2010/11/19 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
node错误处理与日志记录的实现
2018/12/24 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
python抓取百度首页的方法
2015/05/19 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
Python requests库用法实例详解
2018/08/14 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
python实现ip地址的包含关系判断
2020/02/07 Python
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
初中语文教学反思范文
2016/03/03 职场文书
会议主持词通用版
2019/04/02 职场文书
Python装饰器的练习题
2021/11/23 Python
千万级用户系统SQL调优实战分享
2022/03/03 MySQL
零基础学java之循环语句的使用
2022/04/10 Java/Android