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通用防注入程序 推荐
Feb 26 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
Nov 10 PHP
YII视图整合kindeditor扩展的方法
Jul 13 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 PHP
PHP分享图片的生成方法
Apr 25 PHP
PHP抽象类基本用法示例
Dec 28 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中使用XML
2006/10/09 PHP
Array of country list in PHP with Zend Framework
2011/10/17 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
python try except 捕获所有异常的实例
2018/10/18 Python
对python中的argv和argc使用详解
2018/12/15 Python
python 杀死自身进程的实现方法
2019/07/01 Python
Python实现FLV视频拼接功能
2020/01/21 Python
python 命名规范知识点汇总
2020/02/14 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
JDO的含义
2012/11/17 面试题
付款委托书范本
2014/04/04 职场文书
春节超市活动方案
2014/08/14 职场文书