PHP之二分法查找

二分法查找

题目:给出一个如下有序数组,使用PHP代码编写一个函数,查找出指定元素(如,6)的位置。
$array = array(2, 3, 6, 8, 13, 16, 23, 27, 39, 40);



做笔试的时候遇到,当时脑子短路,二分法查找写不出来,只知道原理(总不能把原理写出来吧???)。当时想着试卷不能留空啊,所以就用一个foreach遍历查找出来,后来大佬问起来,只能说忘了(好尴尬),然后大佬就给台阶下了,问道,能不能讲一下原理,然后我就巴拉巴拉讲了出来。好了,废话不多说,进入正题!



二分法查找,需要一个是递增的数组。

原理:找出数组的中间位置,从中间位置把数组一分为二,先拿中间的值要查找的值进行对比。
如果一致,直接返回中间位置;
如果 中间的值 比 要查找的值 大,说明要查找的值在左边,再去左边进行查找,重复上面步骤,直到匹配到或查完数组;
如果 中间的值 比 要查找的值 小,说明在右边,去右边查找。

function search($array, $value, $low = 0, $high = 0){
	// 初始化赋初值
	if($high == 0 && count($array) > 0){
		$high = count($array);
	}
	if($low <= $high){		// 左边坐标 不能大于 右边坐标
		// 找到中间坐标
		$mid = floor(($low + $high) / 2);
		
		if($array[$mid] == $value){		// 中间坐标的值刚好等于要查找的值,直接返回坐标
			return $mid;
		}else if($array[$mid] > $value){		// 中间坐标的值 比 要查找的值 大,进入左边继续查找
			return search($array, $value, $low, $mid-1);
		}else{		// 反之,中间坐标的值 比 要查找的值 小,进入右边继续查找
			return search($array, $value, $mid+1, $high);
		}
	}
	echo '没有找到该值';
}

$array = array(2, 3, 6, 8, 13, 16, 23, 27, 39, 40);
echo search($array, 6);

完事,就这么简单!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值