2013年4月22日星期一

二分查找法

<?php

    
//二分查找法,针对有序数列
    //核心思想:找到数列中间的数,与此数进行比较,如果小于中间数,则去左边的数列找,如果大于中间数,则到右边的数列找.
    //参数介绍:
    //$arr 查找数列所在的数组
    //$findval 要查找的值
    //$leftp,$rightp查找范围的左端和右端
    
function binary($arr,$findval,$leftp,$rightp){
       
        
//如果$leftp > $rightp,说明没有此数
        
if( $leftp $rightp ){
            echo 
"数列中没有".$findval;
            return;
        }

        
//获得中间值得下标
        
$midp=round(($leftp+$rightp)/2);

        if( 
$findval $arr[$midp] ){
            
binary($arr,$findval,$leftp,$midp-1);
        }else if( 
$findval $arr[$midp] ){
            
binary($arr,$findval,$midp+1,$rightp);
        }else{
            echo 
"找到了,下标是".$midp;
        }
   
    }

    
$arr=array(1,3,4,23,45,122,789,1000,123456);
    
binary($arr,1000,0,9); ?>

没有评论:

发表评论