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 相关文章推荐
JAVA/JSP学习系列之七
Oct 09 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
浅析PHP绘图技术
Jul 03 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
May 04 PHP
Codeigniter生成Excel文档的简单方法
Jun 12 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
Dec 11 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
PHP切割汉字的常用方法实例总结
Apr 27 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 PHP
解析laravel使用workerman用户交互、服务器交互
Apr 28 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
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
destoon各类调用汇总
2014/06/20 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
jQuery选择器之子元素选择器详解
2017/09/18 jQuery
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
python中Switch/Case实现的示例代码
2017/11/09 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
普天C++笔试题
2016/03/20 面试题
数控专业推荐信范文
2013/12/02 职场文书
工作疏忽检讨书
2014/01/25 职场文书
语文教学感言
2014/02/06 职场文书
委托证明范本
2014/11/25 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL