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 字符串编码截取函数(兼容utf-8和gb2312)
May 02 PHP
初识laravel5
Mar 02 PHP
php筛选不存在的图片资源
Apr 28 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
Sep 11 PHP
thinkphp5 redis缓存新增方法实例讲解
Mar 24 PHP
PHP遍历数组的6种方式总结
Nov 17 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
咖啡与牛奶
2021/03/03 冲泡冲煮
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
php分页函数
2006/07/08 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
2016/10/29 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
详解Vue整合axios的实例代码
2017/06/21 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
wxPython框架类和面板类的使用实例
2014/09/28 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
python删除字符串中指定字符的方法
2018/08/13 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
opencv+python实现均值滤波
2020/02/19 Python
获奖的大学生创业计划书
2014/01/05 职场文书
商场消防管理制度
2014/01/12 职场文书
益达广告词
2014/03/14 职场文书
优秀党务工作者事迹材料
2014/05/07 职场文书
教育见习报告范文
2014/11/03 职场文书
优秀教师推荐材料
2014/12/16 职场文书
小英雄雨来观后感
2015/06/09 职场文书
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server