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制作的意见反馈表源码
Mar 11 PHP
php set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
PHP数组排序函数合集 以及它们之间的联系分析
Jun 27 PHP
如何在php中正确的使用json
Aug 06 PHP
php将session放入memcached的设置方法
Feb 14 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
php字符串过滤与替换小结
Jan 26 PHP
php+ajax实现无刷新数据分页的办法
Nov 02 PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 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获取文件名后缀
2013/06/09 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
php图像验证码生成代码
2017/06/08 PHP
php的常量和变量实例详解
2017/06/27 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
javascript window对象属性整理
2009/10/24 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
Python爬取梨视频的示例
2021/01/29 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
大三学生入党思想汇报
2014/01/02 职场文书
入股协议书
2014/04/14 职场文书
酒店端午节活动方案
2014/08/26 职场文书
科学育儿宣传标语
2014/10/08 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
劳动模范获奖感言
2015/07/31 职场文书
Python中可变和不可变对象的深入讲解
2021/08/02 Python