php折半查找算法,PHP如何实现折半查找算法
本文主要介绍了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].'
查找次数:'.$time.'
';
}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.'
值为:'.$arr[$mid].'
查找次数:'.$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如何实现折半查找算法相关推荐
- java实现折半查找_java语言之实现折半查找算法
本文主要向大家介绍了java语言之实现折半查找算法,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 折半查找(Binary Search)又称为二分查找,其要求数据序列呈线性结构,也就 ...
- 折半查找递归算法_两篇文章带你了解java基础算法之递归和折半查找
2.1 递归 递归(recursion)是一种常见的解决问题的方法,即把问题逐渐简单化.递归的基本思想就是"自己调用自己",一个使用递归技术的方法将会直接或者间接的调用自己.利用递 ...
- java 递归_两篇文章带你了解java基础算法之递归和折半查找
2.1 递归 递归(recursion)是一种常见的解决问题的方法,即把问题逐渐简单化.递归的基本思想就是"自己调用自己",一个使用递归技术的方法将会直接或者间接的调用自己.利用递 ...
- Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找
Java有序表查找:折半查找.二分查找.差值查找和斐波那契查找 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51 ...
- 排序算法(一)--插入排序法折半插入排序法
约定: 假设数据中有n个数据元素(关键字).排列算法中,将序列中各关键字值依次存放于类型为keytype的数组元素K[1], K[2], K[3], -, K[n]中. 排序结果按照数据元素(关键字) ...
- 数据结构 顺序查找和折半查找的平均查找长度分析关于ASL(平均查找长度)的简单总结
顺序查找 折半查找的平均查找长度分析 ASL:平均查找长度 其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数. A S ...
- c语言指针的折半法查找,数据结构笔记7:折半查找法(二分查找法)及C语言实现...
折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 折半查找算法 对静态查找表{5,13,19,21,37,56, ...
- 算法基础:常用的查找算法知识笔记
1.查找表和查找效率的概念 查找表是指由同一类型的数据元素构成的集合.分为静态查找表和动态查找表. 1.1 静态查找表 1.查询某个特定元素是否在查找表的集合当中 2.查询某个特定元素的各种属性 1. ...
- 查找算法-(顺序查找、二分查找、插值查找、斐波那契查找)
1)顺序查找或叫线性查找 就是顺序遍历匹配 2)二分查找 package search;public class BinarySearch {/*** 二分查找数组必须有序*//**** @param ...
最新文章
- 《LeetCode力扣练习》第206题 反转链表 Java
- python爬虫教程入门-Python爬虫系列 - 入门教学
- threeten-extra使用实例
- 判断字符串是否为JSON
- 面试官 | Java转List三种方式,你说说吧。我。。懵逼。啥时候有三种了
- 王腾疑似喜提Redmi Note10系列新机:最高搭载1亿像素主摄
- 周志华机器学习西瓜书速记第二章绪论模型评估与选择(一)
- 【读万卷书】《哪有没时间这回事》
- android 免root 免流,安卓无需Root一键免流软件合集,具体哪个能用自测
- 从零开发区块链应用(十一)--以太坊地址生成
- sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- +new Date()是什么意思
- win10锁屏c语言,怎样在Win10锁屏界面打开任意应用程序【图文教程】
- 51单片机通过DHT11温度传感器读取温度(2)
- Windows Server 2012 R2 IE浏览器安(qi)装(yong)Adobe Flash Player
- LoRa 数据速率,码片速率,符号速率
- 电脑dhcp服务器修改,更改电脑dhcp服务器地址
- glusterfs 文件服务器 搭建
- HGETALL key
- HDU1718--Rank
热门文章
- Leetcode每日一题:107.binary-tree-level-order-traversal-ii(二叉树的层次遍历)
- 使用MySQL UDFs来调用gearman分布式任务分发系统
- BZOJ1044: [HAOI2008]木棍分割(dp 单调队列)
- python接口自动化(十六)--参数关联接口后传(详解)
- python接口自动化(十)--post请求四种传送正文方式(详解)
- 第一:Pycharm安装(非常详细)
- byte数组转blob类型_Java类型相互转换byte[]类型,blob类型
- 服务器进bios修改启动顺序,服务器进入bios设置u盘启动
- c语言处理机调度实验报告,操作系统实验处理机调度C语言实现.docx
- DocDokuPLM介绍