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 相关文章推荐
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
Zend Studio去除编辑器的语法警告设置方法
Oct 24 PHP
php中防止恶意刷新页面的代码小结
Oct 31 PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
php session的锁和并发
Jan 22 PHP
如何使用PHP给图片加水印
Oct 12 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 PHP
Yii2处理密码加密及验证的方法
May 12 PHP
php桥接模式应用案例分析
Oct 23 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 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快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
JS获取父节点方法
2009/08/20 Javascript
js select常用操作控制代码
2010/03/16 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
Python入门篇之正则表达式
2014/10/20 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
python 整数越界问题详解
2019/06/27 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
英语专业个人求职自荐信
2013/09/21 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
学雷锋月活动总结
2014/04/25 职场文书
听课评语大全
2014/04/30 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
团员个人总结
2015/02/26 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python