排序算法之---折半查找

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

在折半查找之前对查找表按照所查的关键字进行排序的意思是:若查找表中存储的数据元素含有多个关键字时,使用哪种关键字做折半查找,就需要提前以该关键字对所有数据进行排序。

这里我使用了递归的方法来进行折半查找

function halfSearch($target, $start, $end, $arrays)
{
    if ($start <= $end) {
        var_dump($arrays[$start], $arrays[$end]);echo "<hr>";
        $middle = (int)(($end + $start) / 2);
        if ($target == $arrays[$middle]) {
            return true;
        } elseif ($target < $arrays[$middle]) {
            return banSearch($target, $start, $middle - 1, $arrays);
        } else {
            return banSearch($target, $middle + 1, $end, $arrays);
        }
    }
    return false;
}
$arr    = [1, 3, 4, 5, 7, 8, 9, 10, 23, 45, 67, 89, 90, 91, 92, 93, 94, 95, 96, 97];
$target = 96;
$start  = 0;
$end    = count($arr) - 1;
$find = halfSearch($target, $start, $end, $arr);
var_dump($find);
// 打印出的结果为
/**
int(1) int(97)
int(67) int(97)
int(93) int(97)
int(96) int(97)
bool(true)
**/

可以看出二分法查找逐步接近目标

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值