您的位置:首页 > 其它

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

2015-01-17 23:07 281 查看

<?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";

}

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐