本文主要介绍了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如何实现折半查找算法相关推荐

  1. java实现折半查找_java语言之实现折半查找算法

    本文主要向大家介绍了java语言之实现折半查找算法,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 折半查找(Binary Search)又称为二分查找,其要求数据序列呈线性结构,也就 ...

  2. 折半查找递归算法_两篇文章带你了解java基础算法之递归和折半查找

    2.1 递归 递归(recursion)是一种常见的解决问题的方法,即把问题逐渐简单化.递归的基本思想就是"自己调用自己",一个使用递归技术的方法将会直接或者间接的调用自己.利用递 ...

  3. java 递归_两篇文章带你了解java基础算法之递归和折半查找

    2.1 递归 递归(recursion)是一种常见的解决问题的方法,即把问题逐渐简单化.递归的基本思想就是"自己调用自己",一个使用递归技术的方法将会直接或者间接的调用自己.利用递 ...

  4. Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找

    Java有序表查找:折半查找.二分查找.差值查找和斐波那契查找     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51 ...

  5. 排序算法(一)--插入排序法折半插入排序法

    约定: 假设数据中有n个数据元素(关键字).排列算法中,将序列中各关键字值依次存放于类型为keytype的数组元素K[1], K[2], K[3], -, K[n]中. 排序结果按照数据元素(关键字) ...

  6. 数据结构 顺序查找和折半查找的平均查找长度分析关于ASL(平均查找长度)的简单总结

    顺序查找 折半查找的平均查找长度分析 ASL:平均查找长度 其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数. A S ...

  7. c语言指针的折半法查找,数据结构笔记7:折半查找法(二分查找法)及C语言实现...

    折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 折半查找算法 对静态查找表{5,13,19,21,37,56, ...

  8. 算法基础:常用的查找算法知识笔记

    1.查找表和查找效率的概念 查找表是指由同一类型的数据元素构成的集合.分为静态查找表和动态查找表. 1.1 静态查找表 1.查询某个特定元素是否在查找表的集合当中 2.查询某个特定元素的各种属性 1. ...

  9. 查找算法-(顺序查找、二分查找、插值查找、斐波那契查找)

    1)顺序查找或叫线性查找 就是顺序遍历匹配 2)二分查找 package search;public class BinarySearch {/*** 二分查找数组必须有序*//**** @param ...

最新文章

  1. 《LeetCode力扣练习》第206题 反转链表 Java
  2. python爬虫教程入门-Python爬虫系列 - 入门教学
  3. threeten-extra使用实例
  4. 判断字符串是否为JSON
  5. 面试官 | Java转List三种方式,你说说吧。我。。懵逼。啥时候有三种了
  6. 王腾疑似喜提Redmi Note10系列新机:最高搭载1亿像素主摄
  7. 周志华机器学习西瓜书速记第二章绪论模型评估与选择(一)
  8. 【读万卷书】《哪有没时间这回事》
  9. android 免root 免流,安卓无需Root一键免流软件合集,具体哪个能用自测
  10. 从零开发区块链应用(十一)--以太坊地址生成
  11. sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  12. +new Date()是什么意思
  13. win10锁屏c语言,怎样在Win10锁屏界面打开任意应用程序【图文教程】
  14. 51单片机通过DHT11温度传感器读取温度(2)
  15. Windows Server 2012 R2 IE浏览器安(qi)装(yong)Adobe Flash Player
  16. LoRa 数据速率,码片速率,符号速率
  17. 电脑dhcp服务器修改,更改电脑dhcp服务器地址
  18. glusterfs 文件服务器 搭建
  19. HGETALL key
  20. HDU1718--Rank

热门文章

  1. Leetcode每日一题:107.binary-tree-level-order-traversal-ii(二叉树的层次遍历)
  2. 使用MySQL UDFs来调用gearman分布式任务分发系统
  3. BZOJ1044: [HAOI2008]木棍分割(dp 单调队列)
  4. python接口自动化(十六)--参数关联接口后传(详解)
  5. python接口自动化(十)--post请求四种传送正文方式(详解)
  6. 第一:Pycharm安装(非常详细)
  7. byte数组转blob类型_Java类型相互转换byte[]类型,blob类型
  8. 服务器进bios修改启动顺序,服务器进入bios设置u盘启动
  9. c语言处理机调度实验报告,操作系统实验处理机调度C语言实现.docx
  10. DocDokuPLM介绍