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 破解防盗链图片函数
Dec 09 PHP
php下目前为目最全的CURL中文说明
Aug 01 PHP
php 归并排序 数组交集
May 10 PHP
PHP文件上传原理简单分析
May 29 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
解析PHP 5.5 新特性
Jul 02 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
PHP中数据类型转换的三种方式
Apr 02 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 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
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
实例讲解PHP表单处理
2019/02/15 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
Python与Redis的连接教程
2015/04/22 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
静态变量和实例变量的区别
2015/07/07 面试题
跟单文员岗位职责
2014/01/03 职场文书
文明青少年标兵事迹材料
2014/01/28 职场文书
商场中秋节活动方案
2014/02/07 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
八达岭长城导游词
2015/01/30 职场文书
医院合作意向书范本
2015/05/08 职场文书
比较node.js和Deno
2021/04/27 Javascript
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫
Minikube搭建Kubernetes集群
2022/03/31 Servers