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 相关文章推荐
smarty 原来也不过如此~~呵呵
Nov 25 PHP
php UBB 解析实现代码
Nov 27 PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 PHP
yii中widget的用法
Dec 03 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
Sep 01 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 PHP
php-fpm重启导致的程序执行中断问题详解
Apr 29 PHP
php字符串过滤strip_tags()函数用法实例分析
Jun 24 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 PHP
PHP7.3.10编译安装教程
Oct 08 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 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最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python 字符串大小写转换的简单实例
2017/01/21 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
Python下简易的单例模式详解
2019/04/08 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
python 动态调用函数实例解析
2019/10/21 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
为什么要使用servlet
2016/01/17 面试题
应届毕业生个人自荐信范文
2013/11/30 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
2014年减负工作总结
2014/12/10 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang