二分查找算法的前提:
1,针对的是索引数组;
2,针对的是已经排好序的数组;
<?php //二分查找算法: //二分查找算法的前提: //1,针对的是索引数组; //2,针对的是已经排好序的数组; $a = array(1, 3, 11, 18, 19, 22,25, 33, 34, 38, 44, 55, 56,58, 60,61, 66, 70, 77, 88, 90, 91, 93, 95, 98); $search = 33; //要找的数据 $len = count($a); //数量,自然,最大下标是len-1 //函数功能:从数组$arr中的位置$begin开始到位置$end之间找数据$s function binary_search($arr, $s, $begin, $end){ $mid = floor(($begin+$end)/2); //定位中间的位置 $mid_value = $arr[$mid]; //取得中间项的值; if($mid_value == $s){ return true; } else if($mid_value > $s){ if($begin > $mid-1){//如果开始位置都比结束位置大了,表示肯定找不到了 return false; } //中间项比要找的$s大,就去左边找吧: $re = binary_search($arr, $s, $begin, $mid-1); } else{ if($mid+1 > $end){//如果开始位置都比结束位置大了,表示肯定找不到了 return false; } //中间项比要找的$s小,就去右边找吧: $re = binary_search($arr, $s, $mid+1, $end); } return $re; } //使用binary_search()函数从$a中的0到len-1位置找$search $v1 = binary_search($a, $search, 0, $len-1); echo "结果为:"; var_dump($v1); ?>
有关二分查找算法的效率(性能)问题的一点说明:
1000个数据,约10次找出;
100万个数据,约20次找出;
10亿个数据,约30次找出
40亿个数据,约32次找出