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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
BBS(php &amp; mysql)完整版(六)
Oct 09 PHP
PHP网上调查系统
Oct 09 PHP
PHP中cookies使用指南
Mar 16 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
解析PHP的session过期设置
Jun 29 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
php实现URL加密解密的方法
Nov 17 PHP
php显示页码分页类的封装
Jun 08 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 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 AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
将数组写入txt文件 var_export
2009/04/21 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
python进程与线程小结实例分析
2018/11/11 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
[02:29]完美世界高校联赛上海赛区回顾
2015/12/15 DOTA
python sys模块sys.path使用方法示例
2013/12/04 Python
python解析文件示例
2014/01/23 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
Django中的Model操作表的实现
2018/07/24 Python
对Python信号处理模块signal详解
2019/01/09 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
食品厂厂长岗位职责
2014/01/30 职场文书
北京奥运会主题口号
2014/06/13 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
雷峰塔导游词
2015/02/09 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python