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 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
PHP+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
Mar 06 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 PHP
php递归方法实现无限分类实例代码
Feb 28 PHP
理解PHP中的stdClass类
Apr 18 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
Dec 18 PHP
php通过文件头判断格式的方法
May 28 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 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
PHP 防注入函数(格式化数据)
2011/08/08 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
python遍历类中所有成员的方法
2015/03/18 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
python+opencv实现动态物体追踪
2018/01/09 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
python实现SOM算法
2018/02/23 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
python 内置模块详解
2019/01/01 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
python如何删除文件、目录
2020/06/23 Python
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
建筑文秘专业个人求职信范文
2013/12/28 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
生物制药专业求职信
2014/03/11 职场文书
关于安全演讲稿
2014/05/09 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
幼儿园语言教学反思
2016/02/23 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python