『PHP学习笔记』系列六:二分法查找算法

版权声明:本文为博主原创文章,转载注明出处即可。 https://blog.csdn.net/SherlockHolmes_/article/details/83419447

算法原理:

  • 二分法查找适用于数据量较大时,但是数据需要先提前排好顺序。(必须是顺序存储的数据!)
  • 确定该数组中间元素位置:intval(0+(count($arr)-1))/2))
  • 如果中间位置的元素值,与要查找的值相等,则直接返回。
  • 如果中间位置的元素值,与要查找的值不相等,则需要确定新的查找区域,继续二分法查找。
  • 如果要查找的值,大于中间值,则查找区域为:从中间值下标+1,到数组末尾。
  • 如果要查找的值,小于中间值,则查找区域为:从0到中间值下标-1。
  • 依次类推…………

代码实现:

<?php
//二分法查找算法查找数组中的值:注意【每次确定中间下标】
function order($search, $numbers) {
	$low = 0;//最小下标
	$high = count($numbers) - 1;//最大下标
	while ($low <= $high) {
        //求中间下标,并取整
		$mid = intval(($low + $high) / 2);
        //如果中间下标元素与目标元素一致,则退出循环
		if ($numbers[$mid] == $search) {
			return $mid;
		} else if ($numbers[$mid] < $search) {
            //如果中间下标元素小于目标元素,则目标元素在数组后半部分,最小值下标变更为原中间下标+1
			$low = $mid + 1;
		} else if ($numbers[$mid] > $search) {
            //如果中间下标元素大于目标元素,则目标元素在数组前半部分,最小值下标变更为原中间下标-1
			$high = $mid - 1;
		}
	}
}
//待查数组为从小到大的顺序,如果为从大到小,则更改判断部分的比较运算符
$arr1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
$search1 = 7;
echo "元素'{$search1}'的数组下标为:" . order($search1, $arr1);
echo "<hr/>";
 ?>

运行结果: 

猜你喜欢

转载自blog.csdn.net/SherlockHolmes_/article/details/83419447