PHP有序表查找之二分查找(折半查找)算法示例


Posted in PHP onFebruary 09, 2018

本文实例讲述了PHP有序表查找之二分查找(折半查找)算法。分享给大家供大家参考,具体如下:

简介:

二分查找技术,又称为折半查找。它的前提是线性表中的记录必须是关键码有序(通常从小到达有序),线性表必须采用顺序存储。

基本思想:

在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。

代码:

<?php
//二分搜索(折半查找)算法(前提是数组必须是有序数组) 时间复杂度是 O(logn)
$i = 0; //存储对比的次数
//@param 待查找数组
//@param 待搜索的数字
function binsearch($arr,$num){
 $count = count($arr);
 $lower = 0;
 $high = $count - 1;
 global $i;
 while($lower <= $high){
  $i ++; //计数器
  if($arr[$lower] == $num){
   return $lower;
  }
  if($arr[$high] == $num){
   return $high;
  }
  $middle = intval(($lower + $high) / 2);
  if($num < $arr[$middle]){
   $high = $middle - 1;
  }else if($num > $arr[$middle]){
   $lower = $middle + 1;
  }else{
   return $middle;
  }
 }
 //返回-1表示查找失败
 return -1;
}
$arr = array(0,1,16,24,35,47,59,62,73,88,99);
$pos = binsearch($arr,62);
print($pos);
echo "<br>";
echo $i;

运行结果:

7
3

总结:

二叉查找的时间复杂度是 O(logn)。不过由于二叉查找的前提条件是需要有序表顺序存储(数组),如果该有序表需要频繁的执行插入或删除操作,维护有序的排序会带来不小的工作量。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
杏林同学录(三)
Oct 09 PHP
set_include_path在win和linux下的区别
Jan 10 PHP
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
php中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
php 使用file_get_contents读取大文件的方法
Nov 13 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 PHP
Laravel日志用法详解
Oct 09 PHP
php中Ioc(控制反转)和Di(依赖注入)
May 07 PHP
php smtp实现发送邮件功能
Jun 22 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 #PHP
PHP基于redis计数器类定义与用法示例
Feb 08 #PHP
php处理抢购类功能的高并发请求
Feb 08 #PHP
php+redis实现商城秒杀功能
Nov 19 #PHP
php+redis消息队列实现抢购功能
Feb 08 #PHP
PHP多线程模拟实现秒杀抢单
Feb 07 #PHP
PHP设计模式之装饰器模式实例详解
Feb 07 #PHP
You might like
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
Js+Jq获取URL参数的集中方法示例代码
2014/05/20 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
python实现dict版图遍历示例
2014/02/19 Python
python解析中国天气网的天气数据
2014/03/21 Python
python绘制简单折线图代码示例
2017/12/19 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
Python函数中的可变长参数详解
2019/09/12 Python
Django-xadmin+rule对象级权限的实现方式
2020/03/30 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
高考自主招生自荐信
2013/10/20 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
文明城市标语
2014/06/16 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
小学中队长竞选稿
2015/11/20 职场文书
禁毒心得体会范文
2016/01/15 职场文书