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 相关文章推荐
第六节--访问属性和方法
Nov 16 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
PHP中图片等比缩放的实例
Mar 24 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
php curl post 时出现的问题解决
Jan 30 PHP
PHP小技巧之函数重载
Jun 02 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 06 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 PHP
Yii2框架自定义验证规则操作示例
Feb 08 PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 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
php学习之运算符相关概念
2011/06/09 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
jquery创建div 实现代码
2009/04/27 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
理解JS绑定事件
2016/01/19 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
Python中shutil模块的学习笔记教程
2017/04/04 Python
Django 前后台的数据传递的方法
2017/08/08 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
python  logging日志打印过程解析
2019/10/22 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
30年同学聚会邀请函
2014/01/25 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
见习报告格式要求
2014/11/04 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
珍爱生命主题班会
2015/08/13 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书