PHP二分查找算法是一种高效的查找算法,适用于已经排好序的数据集。本文将详细讲解二分查找算法的递归和非递归两种实现方式,并提供两个示例。
一、递归法实现
-
分析二分查找算法的工作原理:将待查找集合分成两个部分,如果中间元素等于待查找元素,则查找成功,否则比较中间元素与待查找元素,并把待查找元素对应的一半作为下一轮查找的集合。反复执行此过程直到查找到所需元素或者集合为空。
-
实现二分查找的递归算法:
function binarySearch(array $arr, $start, $end, $target) {
if ($start <= $end) {
$mid = floor(($start + $end) / 2);
if ($arr[$mid] == $target) {
return $mid;
} elseif ($arr[$mid] > $target) {
return binarySearch($arr, $start, $mid - 1, $target);
} else {
return binarySearch($arr, $mid + 1, $end, $target);
}
} else {
return -1;
}
}
其中,$arr是已经排序的数组,$start和$end是待查找区间的起始和终止下标,$target是待查找的元素。算法首先判断待查找区间是否为空,如果为空则返回-1表示查找失败;否则计算中间元素的下标$mid,比较中间元素与待查找元素的大小,如果相等则查找成功返回$mid,否则将待查找元素对应的一半作为下一轮查找的区间,继续执行递归查找。
- 示例1:查找指定元素在数组中的下标
$arr = [2, 5, 8, 11, 16, 20];
$target = 8;
$result = binarySearch($arr, 0, count($arr) - 1, $target);
if ($result == -1) {
echo "查找失败";
} else {
echo "查找成功,下标为" . $result;
}
在示例中,定义了数组$arr和待查找的元素$target,调用binarySearch函数进行查找,并输出查找结果。
二、非递归法实现
-
分析二分查找算法的工作原理:将待查找集合分成两个部分,如果中间元素等于待查找元素,则查找成功,否则比较中间元素与待查找元素,并把待查找元素对应的一半作为下一轮查找的集合。反复执行此过程直到查找到所需元素或者集合为空。
-
实现二分查找的非递归算法:
function binarySearch(array $arr, $target) {
$start = 0;
$end = count($arr) - 1;
while ($start <= $end) {
$mid = floor(($start + $end) / 2);
if ($arr[$mid] == $target) {
return $mid;
} elseif ($arr[$mid] > $target) {
$end = $mid - 1;
} else {
$start = $mid + 1;
}
}
return -1;
}
其中,$arr是已经排序的数组,$target是待查找的元素。算法通过循环实现查找,每次循环计算中间元素的下标$mid,比较中间元素与待查找元素的大小,如果相等则查找成功返回$mid,否则将待查找元素对应的一半作为下一轮循环的区间。
- 示例2:查找指定元素在数组中的下标
$arr = [2, 5, 8, 11, 16, 20];
$target = 5;
$result = binarySearch($arr, $target);
if ($result == -1) {
echo "查找失败";
} else {
echo "查找成功,下标为" . $result;
}
在示例中,定义了数组$arr和待查找的元素$target,调用binarySearch函数进行查找,并输出查找结果。
以上就是二分查找算法的递归和非递归实现以及示例说明的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP二分查找算法示例【递归与非递归方法】 - Python技术站