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 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
Feb 22 PHP
数据库中排序的对比及使用条件详解
Feb 23 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
Nov 07 PHP
解析php做推送服务端实现ios消息推送
Jul 01 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
php-beanstalkd消息队列类实例分享
Jul 19 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
PHP实现的二分查找算法实例分析
Dec 19 #PHP
PHP实现git部署的方法教程
Dec 19 #PHP
PHP递归实现快速排序的方法示例
Dec 18 #PHP
Laravel框架中自定义模板指令总结
Dec 17 #PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 #PHP
PHP7下协程的实现方法详解
Dec 17 #PHP
浅谈PHP实现大流量下抢购方案
Dec 15 #PHP
You might like
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
javascript解析json实例详解
2014/11/05 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
JS解析XML实例分析
2015/01/30 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
Python subprocess模块详细解读
2018/01/29 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
django基础学习之send_mail功能
2019/08/07 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
美国学校用品、教室和教学商店:Discount School Supply
2018/04/04 全球购物
计算机本科生自荐信
2013/10/15 职场文书
最受欢迎的自我评价
2013/12/22 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
宿舍标语大全
2014/06/19 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
Python实现文字pdf转换图片pdf效果
2022/04/03 Python
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android