PHP实现的折半查找算法示例


Posted in PHP onDecember 19, 2017

本文实例讲述了PHP实现的折半查找算法。分享给大家供大家参考,具体如下:

定义:折半查找技术,也就是二分查找。它的前提是线性表中的记录必须是关键码有序(通常从大到小有序),线性表必须采用顺序存储。

折半查找的基本思想:取中间记录作为比较对象,若给定值与中间记录的关键字,则在中间记录的关键字相等,则查找成功;若给定值小于中间记录的作伴去继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。

实现代码:

<?php
//递归方式
function bin_recur_search($arr,$val){
  global $time;
  if(count($arr) >= 1){
    $mid = intval(count($arr) / 2);
    $time++;
    if($arr[$mid] == $val){
      return '值为:'.$arr[$mid].'<br>查找次数:'.$time.'<br>';
    }elseif($arr[$mid] > $val){
      $arr = array_splice($arr,0,$mid);
      return bin_recur_search($arr, $val);
    }else{
      $arr = array_slice($arr,$mid + 1);
      return bin_recur_search($arr, $val);
    }
  }
  return '未找到'.$val;
}
//非递归方式
function bin_search($arr,$val){
  if(count($arr) >= 1){
    $low = 0;
    $high = count($arr);
    $time = 0;
    while($low <= $high){
      $time++;
      $mid = intval(($low + $high)/2);
      if($val == $arr[$mid]){
        return '索引:'.$mid.'<br>值为:'.$arr[$mid].'<br>查找次数:'.$time;
      }elseif($val > $arr[$mid]){
        $low = $mid + 1;
      }else{
        $high = $mid - 1;
      }
    }
  }
  return '未找到'.$val;
}
$arr = array(1,3,5,7,7,9,25,68,98,145,673,8542);
echo bin_recur_search($arr, 673);
echo bin_search($arr, 673);
?>

运行结果:

值为:673
查找次数:4
索引:10
值为:673
查找次数:4

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

PHP 相关文章推荐
我的论坛源代码(十)
Oct 09 PHP
php 验证码制作(网树注释思想)
Jul 20 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
php+xml实现在线英文词典之添加词条的方法
Jan 23 PHP
php字符串函数学习之strstr()
Mar 27 PHP
PHP抽奖算法程序代码分享
Oct 08 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
May 05 PHP
PHP扩展安装方法步骤解析
Nov 24 PHP
php之header的不同用法总结(实例讲解)
Nov 28 #PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 #PHP
PHP命令空间namespace及use的用法小结
Nov 27 #PHP
Laravel 批量更新多条数据的示例
Nov 27 #PHP
PHP开发实现微信退款功能示例
Nov 25 #PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 #PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 #PHP
You might like
用PHP制作静态网站的模板框架(一)
2006/10/09 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
php文件缓存类汇总
2014/11/21 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
phpStorm2020 注册码
2020/09/17 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
JQuery jsonp 使用示例代码
2009/08/12 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
Node.js 使用流实现读写同步边读边写功能
2017/09/11 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
Python中获取对象信息的方法
2015/04/27 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
详解Python绘图Turtle库
2019/10/12 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
Django权限设置及验证方式
2020/05/13 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
实习公司领导推荐函
2014/05/21 职场文书
火灾现场处置方案
2014/05/28 职场文书
疾病防治方案
2014/05/31 职场文书
六一亲子活动感想
2015/08/07 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书