二分查找也叫折半查找,是每次查找集合中的一半。
1 $arr = [3,5,10,20,22,26,55,59,63,68];
如上所示数组,如果现在要查找68所在的位置,使用遍历比较的话,最坏情况需要查找10次,而如果使用二分查找算法的话,只需比较3次就能找到,大大提高了查找效率。
当然,数量小的数组可能看不出很大的差异,如果数组特别大,就能明显的比较出来。
PHP代码如下:
1 function erfen($arr,$v){ 2 $start = 0; 3 $end = count($arr)-1; 4 //开始位置大于结束位置时结束循环 5 while($start <= $end){ 6 $mid = intval(($start+$end)/2); 7 8 if($arr[$mid] > $v){ 9 $end = $mid -1; 10 }elseif($arr[$mid] < $v){ 11 $start = $mid + 1; 12 }else{ 13 return $mid; 14 } 15 } 16 return -1; 17 } 18 19 $arr = [3,5,10,20,22,26,55,59,63,68]; 20 21 echo erfen($arr,63);
输出结果为8,即下标为8的元素为查找元素。
注:传入数组必须为有序数组