php实现二分法查找详解编程语言

一、递归方法实现二分法查找:

注:前提是数组是有序数组; 

原理:
1)先计算出数组的中间值并向上取整
2)判断中间值是否和要查找的值相同,相同则直接返回
3)不相同就判断大小如果比中间值大,就用array_slice从中间的下一个位置截取片段生成新数组,反之同样方法截取片段。
4)然后用递归的手法,直至找到相应元素,如果到最后也没有找到,也就是数组长度为1时还没有找到,就直接返回没有此元素;

function secSearch($data , $search){ 
    $mid = ceil(count($data) / 2) - 1; 
    if( $data[$mid] == $search ){ 
        return $data[$mid]; 
    } 
    if( count($data) == 1 ){ 
        return '没有找到'; 
    } 
    if($data[$mid] > $search){ 
       $data =  array_slice($data,0,$mid); 
       return twoF( $data,$search ); 
    } 
    if( $data[$mid] < $search){ 
        $data =  array_slice($data,$mid+1); 
        return twoF( $data,$search ); 
    } 
}

二、普通方式实现
原理:
1)定义一个最小值和最大值,最小值为0,最大值为数组长度减1
2)while循环判断当最小值小于等于最大值时,定义一个中间值,为最大值和最小值的和除以2
3)如果中间值和要查找的值刚好相等,直接跳出循环
4)如果不相等,无非两种情况,大于或小于,当大于中间值时,给最小值赋值为中间值+1,小于时给最大值赋值为中间值减1,直至找到,或者当最大值小于最小值时跳出循环,返回找到或没找到

function search($data ,$search){ 
    $low = 0; 
    $high = count($data) - 1; 
    while( $low <= $high ){ 
        $mid = floor( ($low + $high) / 2 ); 
        if( $data[$mid] == $search ){ 
            return $data[$mid]; 
        } 
        if( $data[$mid] > $search ){ 
            $high = $mid - 1; 
        } 
        if($data[$mid] < $search){ 
            $low = $mid + 1; 
        } 
    } 
    return '没有找到'; 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16410.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论