php排序之顺序查找,二分查找

1.顺序查找: 对某个数组,按照顺序,一个一个比较,然后找到你要的数据.

案例:

        要求从一个数组 $arr=array(46,90,900,0,-1)中查找一个 数 34,如果查找则输出该数的下标,如果找不到,则输出,查无此数

/**
*要求从一个数组 $arr=array(46,90,900,0,-1)中查找一个 数 34,如果查找则输出该数//的下标,如果找不        
*到,则输出,查无此数
*/
$arr=array(46,90,900,0,-1,-1);
function search(&$arr,$findVal){
    $flag=false;
    for($i=0;$i<count($arr);$i++){
         if($findVal==$arr[$i]){
             echo "找到了,下标为=$i";
             $flag=true;
             //break;
          }
     }
     if(!$flag){
         echo '查询不到';
      }
}

search($arr,-1);

2.二分查找法: 它有一个重要的前提, 该数组本身已经是一个有序数组.如果该数组不是有序的,则必须先排序再查找

//二分查找函数
function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){
          //当 $rightIndex<$leftIndex 说明没有数
          //为什么
          if($rightIndex<$leftIndex){
               echo "找不到该数";
               return ;
          }
     
          //找到中间这个数
          $middleIndex=round(($rightIndex+$leftIndex)/2);//函数round:四舍五入

          //如果大于则,向后面找
          if($findVal>$arr[$middleIndex]){
              
               binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);
          }

          //如果是小于中间这个数,则向前面找
          else if($findVal<$arr[$middleIndex]){
               binarySearch($arr,$findVal,$leftIndex,$middleIndex-1);
          }else{
               echo "找到这个数 下标是 $middleIndex";
          }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值