<?php
/**
* 数据算法,之二分查找
* 要求是数据为索引,查找从索引中间位置进行二分查询查找。
* @ arr $list 数组
* @ string $item 数值
* @ 开源达人 2023-8-20
*/
function bs($list,$item){
$low = 0; //数组索引从0 索引开始的位置
$high = count($list)-1; // 索引最后的位置
while($low <= $high){
$mid = ($low + $high) / 2; //二分查找 从数据的中间索引进行
$guess = $list[$mid]; //中间索引的数值
if($guess == $item){ // 如果这个索的 数值 等于 查找的值
return $mid; //返回 索引
}
if($guess > $item){ //如果 索引的数值 大于 查找的值
return $mid - 1; //返回 索引值 减去 1
}else{
$low = $mid -1; //开始的索引 减去 1
}
}
return null; //返回 空
}
$mylist = [1,3,4,5,6,7,9];
echo count($mylist);
echo "///////////";
echo bs($mylist,3);