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 相关文章推荐
ADODB类使用
Nov 25 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
Apache中php.ini的设置方法
Feb 28 PHP
Yii操作数据库的3种方法
Mar 11 PHP
thinkphp模板赋值与替换实例简述
Nov 24 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 PHP
php实现生成验证码实例分享
Apr 10 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
PHP异步进程助手async-helper
Feb 05 PHP
Yii支持多域名cors原理的实现
Dec 05 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 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统计文章排行示例
2014/03/04 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
跟老齐学Python之总结参数的传递
2014/10/10 Python
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
Python获取服务器信息的最简单实现方法
2015/03/05 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
文化建设工作方案
2014/05/12 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
涉外离婚协议书怎么写
2014/11/20 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
公司职员入党自传书
2015/06/26 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
Python中itertools库的四个函数介绍
2022/04/06 Python
Nginx 匹配方式
2022/05/15 Servers
Nginx报404错误的详细解决方法
2022/07/23 Servers