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 数字左侧自动补0
Mar 31 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
Aug 05 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
PHP读取PDF内容配合Xpdf的使用
Nov 24 PHP
PHP Reflection API详解
May 12 PHP
PHP实现获取并生成数据库字典的方法
May 04 PHP
既简单又安全的PHP验证码 附调用方法
Jun 02 PHP
在php7中MongoDB实现模糊查询的方法详解
May 03 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 PHP
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
Mar 29 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/01/17 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
js 对象是否存在判断
2009/07/15 Javascript
javascript类继承机制的原理分析
2009/09/12 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
深入了解js原型模式
2019/05/30 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
Python实现的ini文件操作类分享
2014/11/20 Python
Python变量和数据类型详解
2017/02/15 Python
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
详解Python实现多进程异步事件驱动引擎
2017/08/25 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
年度考核评语
2014/01/19 职场文书
财务总监岗位职责
2014/03/07 职场文书
单位授权委托书范文
2014/08/02 职场文书
学生违反校规检讨书
2014/10/28 职场文书
学校学期工作总结
2015/08/13 职场文书
员工给公司的建议书
2019/06/24 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书