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生成静态页
Nov 25 PHP
php基础知识:函数基础知识
Dec 13 PHP
php curl的深入解析
Jun 02 PHP
PHP页面中文乱码分析
Oct 29 PHP
php如何连接sql server
Oct 16 PHP
php session的锁和并发
Jan 22 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
Aug 11 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 24 PHP
php 函数中静态变量使用的问题实例分析
Mar 05 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使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php随机显示图片的简单示例
2014/02/15 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
Javascript 读书笔记索引贴
2010/01/11 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
Python从Excel中读取日期一列的方法
2018/11/28 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
如何在C# winform中异步调用web services
2015/09/21 面试题
风险评估实施方案
2014/03/09 职场文书
园艺师求职信
2014/04/27 职场文书
幼儿园课题方案
2014/06/09 职场文书
项目合作意向书模板
2014/07/29 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
品质保证书格式
2015/02/28 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
2016大一新生军训感言
2015/12/08 职场文书