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
第三节--定义一个类
Nov 16 PHP
Php获取金书网的书名的实现代码
Jun 11 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
php版微信js-sdk支付接口类用法示例
Oct 12 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
详细解读php的命名空间(二)
Feb 21 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
thinkphp框架使用JWTtoken的方法详解
Oct 10 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遍历文件夹和文件列表示例分享
2014/03/11 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
Python实现的二维码生成小软件
2014/07/11 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
使用TensorFlow实现SVM
2018/09/06 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
住院医师规范化培训实施方案
2014/06/12 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技