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 相关文章推荐
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
php抓取页面与代码解析 推荐
Jul 23 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
PHP SPL使用方法和他的威力
Nov 12 PHP
PHP @ at 记号的作用示例介绍
Oct 10 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
PHP加密解密类实例代码
Jul 20 PHP
PHP导出带样式的Excel示例代码
Aug 28 PHP
PHP实现的策略模式简单示例
Aug 25 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
Oct 18 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
python基础教程之常用运算符
2014/08/29 Python
Python中的pass语句使用方法讲解
2015/05/14 Python
python高阶爬虫实战分析
2018/07/29 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
大学生职业生涯规划书模版
2013/12/30 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
校园广播站开场白
2015/06/01 职场文书
如何理解及使用Python闭包
2021/06/01 Python