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 相关文章推荐
图书管理程序(一)
Oct 09 PHP
xajax写的留言本
Nov 25 PHP
PHP源码之explode使用说明
Aug 05 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Jul 03 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
May 08 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
PHP中IP地址与整型数字互相转换详解
Aug 20 PHP
php定义一个参数带有默认值的函数实例分析
Mar 16 PHP
浅谈Laravel核心解读之Console内核
Dec 02 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代码
2010/07/17 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
php实现文件编码批量转换
2014/03/10 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
帝国cms目录结构分享
2015/07/06 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
composer.lock文件的作用
2016/02/03 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PHP中抽象类,接口功能、定义方法示例
2019/02/26 PHP
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
python 性能优化方法小结
2017/03/31 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python实现AES加密解密
2019/03/28 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
python爬取youtube视频的示例代码
2021/03/03 Python
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
《鸟的天堂》教学反思
2014/02/27 职场文书
如何写自我鉴定
2014/03/19 职场文书
服装设计专业求职信
2014/06/16 职场文书
2014年采购员工作总结
2014/11/18 职场文书
涨价通知
2015/04/23 职场文书
活动总结模板大全
2015/05/11 职场文书
投资入股协议书
2016/03/22 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python