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 相关文章推荐
PHP中的CMS的涵义
Mar 11 PHP
PHP IN_ARRAY 函数使用注意事项
Jul 24 PHP
php根据操作系统转换文件名大小写的方法
Feb 24 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
Nov 29 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 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循环输出数据库内容的代码
2008/05/24 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
yii用户注册表单验证实例
2015/12/26 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python远程登录代码
2008/04/29 Python
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
python基本语法练习实例
2017/09/19 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
Python中format()格式输出全解
2019/04/12 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
优秀士兵个人事迹材料
2014/01/19 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
飞越疯人院观后感
2015/06/09 职场文书
Redis+AOP+自定义注解实现限流
2022/06/28 Redis