php中二分法查找算法实例分析


Posted in PHP onSeptember 22, 2016

本文实例讲述了php中二分法查找算法实现方法。分享给大家供大家参考,具体如下:

二分法查找在高级点的开发可能会用到了,当然在大公司找工作时都会有面试题是这种了,下面我们来看一篇关于二分法查找在php中实现方法,具体的细节如下所示.

二分法(dichotomie) 即一分为二的方法,设[a,b]为R的闭区间,逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的中点.

例子1:

header('Content-Type: text/html; charset=utf-8;');
$arr = array(2,33,22,1,323,321,28,36,90,123);
sort($arr);
//二分法查找
echo $index = binarySearch($arr,321);
function binarySearch($arr,$key){
 $len = count($arr);
 $mid = -1;
 $start = 0;
 $end  = $len-1;
 while($start<=$end){
 $mid = (int)(($start+$end)/2);
 echo $mid."\n";
 if($arr[$mid] == $key){
  return $mid;
 }else if($arr[$mid] < $key){
  $start = $mid+1;
 }else if($arr[$mid] > $key){
  $end = $mid-1;
 }
 }
}

例子2:

<?php
//search函数 其中$array为数组,$k为要找的值,$low为查找范围的最小键值,$high为查找范围的最大键值
function search($array, $k, $low=0, $high=0)
{
  if(count($array)!=0 and $high == 0) //判断是否为第一次调用
  {
    $high = count($array);
  }
  if($low <= $high) //如果还存在剩余的数组元素
  {
    $mid = intval(($low+$high)/2); //取$low和$high的中间值
    if ($array[$mid] == $k) //如果找到则返回
    {
      return $mid;
    }
    elseif ($k < $array[$mid]) //如果没有找到,则继续查找
    {
      return search($array, $k, $low, $mid-1);
    }
    else
    {
      return search($array, $k, $mid+1, $high);
    }
  }
  return -1;
}
$array = array(4,5,7,8,9,10); //测试search函数
echo search($array, 8); //调用search函数并输出查找结果
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 编程的 5个良好习惯
Feb 20 PHP
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
Jun 13 PHP
php实现简单洗牌算法
Jun 18 PHP
最常用的8款PHP调试工具
Jul 06 PHP
php隐藏实际地址的文件下载方法
Apr 18 PHP
php基于openssl的rsa加密解密示例
Jul 11 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
php对象工厂类完整示例
Aug 09 PHP
Yii2中SqlDataProvider用法示例
Sep 22 #PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 #PHP
php简单压缩css样式示例
Sep 22 #PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
Sep 22 #PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
Sep 21 #PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
Sep 21 #PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 #PHP
You might like
php cache类代码(php数据缓存类)
2010/04/15 PHP
PHP学习 变量使用总结
2011/03/24 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
vue中实现动态生成二维码的方法
2020/02/21 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
keras.layer.input()用法说明
2020/06/16 Python
深入分析python 排序
2020/08/24 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
高中物理教学反思
2014/02/08 职场文书
房产公证委托书范本
2014/09/20 职场文书
安全责任协议书范本
2016/03/23 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
Django显示可视化图表的实践
2021/05/10 Python
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript