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

相关推荐:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值