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 模拟$_PUT实现代码
Mar 15 PHP
phpmail类发送邮件函数代码
Feb 20 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
php生成图片验证码
Jun 09 PHP
php利用header函数下载各种文件
Aug 24 PHP
Laravel 5.3 学习笔记之 配置
Aug 28 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
PHP中empty,isset,is_null用法和区别
Feb 19 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 PHP
使用PHP开发留言板功能
Nov 19 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 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
mayfish 数据入库验证代码
2010/04/30 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
2014/06/30 PHP
浅谈php冒泡排序
2014/12/30 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
javascript中检测变量的类型的代码
2010/12/28 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
numpy.random模块用法总结
2019/05/27 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
python实现图片中文字分割效果
2019/07/22 Python
Python中base64与xml取值结合问题
2019/12/22 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
偷看我的初中毕业鉴定
2014/01/29 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
汉语拼音教学反思
2016/02/22 职场文书
python超详细实现完整学生成绩管理系统
2022/03/17 Python
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers