十八、二分查找 (由一个数找在数组中的位置)

来源:互联网 发布:java项目开发书籍 编辑:程序博客网 时间:2024/05/02 01:46

<?php
//二分查找
//目标:找一个数据(31)在该数组中的位置
$v1 = 15;
$arr2 = array( 3,  4,  5,  15,  19, 21,  25,  30,  30,  30,  33,  38,  44, 51, 52, 55, 60,  77, 80, 82,  83);
//$arr: 要从中找数据的数组
//$v: 要找的数据
//$start: 要从该数组中查找的开始位置
//$start: 要从该数组中查找的结尾位置
function  binary_search($arr,  $v, $start, $end){
 if($start > $end)return false;
 $mid = floor(($start + $end)/2); //计算出中间项的位置
 if($v == $arr[$mid]){
  return $mid; //第一次就找到了
 }
 else if($v < $arr[$mid]){ //此时就只要去“左边那一半”找了
  $start = $start; //左边位置还是左边位置
  $end = $mid - 1; //右边位置就应该是$mid - 1;
  //if($start > $end)return false;
  return binary_search($arr,  $v, $start, $end);
 }
 else{
  $start = $mid + 1; //左边位置就应该是$mid + 1
  $end = $end;  //右边位置还是右边位置;
  //if($start > $end)return false;
  return binary_search($arr,  $v, $start, $end);
 }
}
$len = count($arr2);
$result = binary_search($arr2, $v1, 0, $len-1);
if($result === false){
 echo "没找到";
}
else{
 echo "位置为:$result";
}
?>
0 0
原创粉丝点击