zoukankan      html  css  js  c++  java
  • php二分查找的两种实现方法

    递归函数实现:

    function  binarySearch($arr, $val, $st, $et){
    	$m_ind = $st + floor(($et-$st)/2);
    	$max_idx = count($arr)-1;
    	$min_idx = 0;
    		
    	if($arr[$min_idx]>$val || $arr[$max_idx]<$val || ($et-$st==1 && $arr[$et]!=$val && $arr[$st]!=$val)){
    			return -1;
    	}
    		
    	if($arr[$m_ind]==$val){
    			return $m_ind;
    	} else if($arr[$m_ind] > $val){
    		$et = $m_ind - 1;
    		return binarySearch($arr, $val, $st, $et);
    	} else {
    		$st = $m_ind + 1;
    		return binarySearch($arr, $val, $st, $et);
    	}
    }
    

    循环实现:

    function binarySearch($arr, $val){
    	$st = 0;
    	$et = count($arr) - 1;
    	$m_ind = floor(($et-$st)/2);
    	do{
    			
    		if($arr[$m_ind]==$val){
    			return $m_ind;
    		} else if($arr[$m_ind] > $val){
    			$et = $m_ind - 1;
    			$off = ceil(($m_ind-$st)/2);
    			if($off == 0) return -1;
    			$m_ind = $m_ind - $off;
    		} else {
    			$st = $m_ind + 1;
    			$off = ceil(($et-$m_ind)/2);
    			if($off == 0) return -1;
    			$m_ind = $m_ind + $off;
    		}
    	}while(true);
    }
    

      水平有限,敬请指正!

  • 相关阅读:
    mac 使用tree命令
    为什么redis支持lua脚本功能
    redis协议
    Linux的SOCKET编程详解
    大型网站架构之分布式消息队列
    自定义String
    逆转单链表
    单例模式 C++
    构造函数不能为虚函数
    Windows消息机制
  • 原文地址:https://www.cnblogs.com/age0420/p/6491866.html
Copyright © 2011-2022 走看看