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 相关文章推荐
分页显示Oracle数据库记录的类之一
Oct 09 PHP
一个简单的自动发送邮件系统(一)
Oct 09 PHP
用PHP和ACCESS写聊天室(三)
Oct 09 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
Sep 25 PHP
Ajax+PHP边学边练 之五 图片处理
Dec 03 PHP
php获取301跳转URL简单实例
Dec 16 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
PHP简单遍历对象示例
Sep 28 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
PHP中ltrim()函数的用法与实例讲解
Mar 28 PHP
PHP超全局变量实现原理及代码解析
Sep 01 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函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
详解javascript函数的参数
2015/11/10 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
angularJS开发注意事项
2018/05/26 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
python判断端口是否打开的实现代码
2013/02/10 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
利用python开发app实战的方法
2019/07/09 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
游戏商店:Eneba
2020/04/25 全球购物
军训自我鉴定200字
2014/02/13 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
升国旗演讲稿
2014/09/05 职场文书
学习党代会心得体会
2014/09/05 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
python pyhs2 的安装操作
2021/04/07 Python
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫