php 二分查找(折半查找) 顺序查找

来源:互联网 发布:手机辅助软件 编辑:程序博客网 时间:2024/06/13 01:05
<?php
Class Select
{
/**
* @content 二分查找(折半查找)递归
* @params [type] $select    [要查找的元素]
* @params [type] $arr [数组]
* @params [type] $min    键值开始的位置
* @params [type] $max    键值结束的位置
*/
public function BinaryRecursive($arr,$select,$min,$max){
$half = floor(($min+$max)/2);
if($select>$arr[$half]){
return $this->Binary($arr,$select,$half+1,$max);
}else if($select < $arr[$half]){
return $this->Binary($arr,$select,$min,$half-1);
}else{
return $half;
}
}


/**
* @content 二分查找(折半查找)非递归
* @params [type] $select    [要查找的元素]
* @params [type] $arr [已经排序好的数组]
* @params [type] $min    键值开始的位置
* @params [type] $max    键值结束的位置
*/


public function Binary($arr,$select,$min,$max){

while($min<=$max){

//$half 中间值位置

$half = ceil(($min+$max)/2);

//当所查值大于中间值时,变$min  键值的开始位置

if($select > $arr[$half] ){

$min = $half + 1;

}elseif($select < $arr[$half]){

//当所查值小于中间值时,变$max     键值的结束位置

$max = $half - 1;
}else{
return $half;
}
}
//return -1;
}


/*顺序查找*/ 
    function seqSearch($arr,$k){    
       foreach($arr as $key=>$val){    
           if($val==$k){    
                return $key;    
           }    
        }    
        return -1;    
    }  


}
?>
原创粉丝点击