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 相关文章推荐
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
php基础教程 php内置函数实例教程
Aug 21 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
smarty缓存用法分析
Dec 16 PHP
PHP自定义错误用法示例
Sep 28 PHP
轻松实现php文件上传功能
Feb 17 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP抽象类与接口的区别详解
Mar 21 PHP
laravel model 两表联查示例
Oct 24 PHP
Swoole源码中如何查询Websocket的连接问题详解
Aug 30 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数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
vue观察模式浅析
2018/09/25 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
极简的Python入门指引
2015/04/01 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
python实现随机加减法生成器
2020/02/24 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
华为慧通笔试题
2016/04/22 面试题
Internet主要有哪些网络群组成
2015/12/24 面试题
大学生护理专业自荐信
2013/10/03 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
财务会计专业求职信
2014/06/09 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
Python实现文字pdf转换图片pdf效果
2022/04/03 Python