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 相关文章推荐
mysql 的 like 问题,超强毕杀记!!!
Jan 18 PHP
php URL跳转代码 减少外链
Jun 25 PHP
php daddslashes()和 saddslashes()有哪些区别分析
Oct 26 PHP
用php随机生成福彩双色球号码的2种方法
Feb 04 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
使用php判断网页是否gzip压缩
Jun 25 PHP
解决Codeigniter不能上传rar和zip压缩包问题
Mar 07 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 PHP
使用ThinkPHP+Uploadify实现图片上传功能
Jun 26 PHP
thinkphp常见路径用法分析
Dec 02 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
Jul 19 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 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数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
python编程实现归并排序
2017/04/14 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
python实现日常记账本小程序
2018/03/10 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
使用HTML5进行SVG矢量图形绘制的入门教程
2016/02/19 HTML / CSS
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
Ruby如何创建一个线程
2013/03/10 面试题
材料采购员岗位职责
2013/12/17 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
亲属关系公证书样本
2015/01/23 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
银行资信证明
2015/06/17 职场文书
婚宴新娘致辞
2015/07/28 职场文书
行为习惯主题班会
2015/08/14 职场文书
德劲DE1108畅想
2021/04/22 无线电
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js