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 和 XML: 使用expat函数(三)
Oct 09 PHP
PHP 输出缓存详解
Jun 20 PHP
PHP 全角转半角实现代码
May 16 PHP
PHP中文URL编解码(urlencode()rawurlencode()
Jul 03 PHP
php方法调用模式与函数调用模式简例
Sep 20 PHP
PHP UTF8中文字符截断函数代码
Sep 11 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
关于file_get_contents返回为空或函数不可用的解决方案
Jun 24 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 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
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
单位消防安全责任书
2014/07/23 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书