<?php
//php二分法查找(也叫折半查找)算法/ 数组必须是从小到大的
$abs=array(1,12,13,114,115,116,117,118);
//z查找数组的最大下标
$hight = count($abs) - 1 ;
$low =0;
$num = 6;
//var_dump($abs);
//基本思想
// 1首先找到根据下标找到中间这个数字
// 2如果要找的数字大于中间这个数字,则继续向后进行二分查询, 折半查询
// 3如果要找的数字小于中间的数,则继续向前进行二分法查询,折半查询 找到时 希望能同时找到元素下标
//如果起始下标大于终止下标,说明未找到
function dichotomy($abs,$low,$hight,$num) {
if($low > $hight){
return false;
}
//取出中间元素下标,现在是向下去
$center = floor(($low + $hight)/2);
if($abs[$center] > $num ){
//要查询的数小于中间的数,向前查,那么这时候最大下标为 ,中间这个数的下标-1
$hight = $center-1;
//再进行递归调用
return dichotomy($abs,$low,$hight,$num);
}
else if($abs[$center] < $num){
//要查询的数字大于中间的数字,向后查,那么这时候最大下标为,$hight 最小下标为 $center +1
$low = $center + 1 ;
return dichotomy($abs,$low,$hight,$num);
}else{
//找到这个数, 返回下标
return $center;
}
}
$date= dichotomy($abs,0,$hight,115);
var_dump($date);
?>
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦