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:风雨欲来 路在何方?
Oct 09 PHP
PHP调用三种数据库的方法(1)
Oct 09 PHP
也谈截取首页新闻 - 范例
Oct 09 PHP
让PHP支持断点续传的源码
May 16 PHP
学习php分页代码实例
Oct 24 PHP
php单态设计模式(单例模式)实例
Nov 18 PHP
YII动态模型(动态表名)支持分析
Mar 29 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
php查找字符串中第一个非0的位置截取
Feb 27 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
Feb 08 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
一文搞懂php的垃圾回收机制
Jun 18 PHP
php之header的不同用法总结(实例讲解)
Nov 28 #PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 #PHP
PHP命令空间namespace及use的用法小结
Nov 27 #PHP
Laravel 批量更新多条数据的示例
Nov 27 #PHP
PHP开发实现微信退款功能示例
Nov 25 #PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 #PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 #PHP
You might like
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
PHP学习之数组值的操作
2011/04/17 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
python实现在pickling的时候压缩的方法
2014/09/25 Python
python中dir函数用法分析
2015/04/17 Python
python开发之list操作实例分析
2016/02/22 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
详解supervisor使用教程
2017/11/21 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
Python爬取梨视频的示例
2021/01/29 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
什么是TCP/IP
2014/07/27 面试题
七一表彰活动方案
2014/01/18 职场文书
八月迷情观后感
2015/06/11 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL