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 session 错误
May 21 PHP
Session保存到数据库的php类分享
Oct 24 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
php+xml实现在线英文词典之添加词条的方法
Jan 23 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 PHP
利用Laravel事件系统如何实现登录日志的记录详解
May 20 PHP
PHP实现动态压缩js与css文件的方法
May 02 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 12 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 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
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
Python中实现常量(Const)功能
2015/01/28 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
Gap工厂店:Gap Factory
2017/11/02 全球购物
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
关于运动会广播稿200字
2014/10/08 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
技术员岗位职责
2015/02/04 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis
create-react-app开发常用配置教程
2022/06/25 Javascript