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 相关文章推荐
第八节 访问方式 [8]
Oct 09 PHP
PHP 命名空间实例说明
Jan 27 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
获取URL文件名后缀
Oct 24 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
浅谈本地WAMP环境的搭建
May 13 PHP
php实现随机生成易于记忆的密码
Jun 19 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
php生成二维码不保存服务器还有下载功能的实现代码
Aug 09 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 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
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
分享php邮件管理器源码
2016/01/06 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
React组件refs的使用详解
2018/02/09 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Python画图学习入门教程
2016/07/01 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
兼职业务员岗位职责
2014/01/01 职场文书
公司活动方案范文
2014/03/06 职场文书
给学校的建议书
2014/03/12 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
社区创先争优承诺书
2014/08/30 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
教师继续教育反思周记
2015/06/25 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技