* @date 2017/6/17 * @license Mozilla * ------------------------------------------------------------- * æè·¯åæï¼æ°ç»ä¸é´çå¼floor((low+top)/2) * ------------------------------------------------------------- * å åæ°ç»ä¸é´çå¼floor((low+top)/2)ç¶åéè¿ä¸æéæ¥æ¾çæ°åè¿è¡æ¯è¾ï¼ * è¥æ¯ä¸é´å¼å¤§åå°é¦å¼æ¿æ¢ä¸ºä¸é´ä½ç½®ä¸ä¸ä¸ªä½ç½®ï¼ç»§ç»ç¬¬ä¸æ¥çæä½ï¼ * è¥æ¯ä¸é´å¼å°ï¼åå°å°¾å¼æ¿æ¢ä¸ºä¸é´ä½ç½®ä¸ä¸ä¸ªä½ç½®ï¼ç»§ç»ç¬¬ä¸æ¥æä½ * éå¤ç¬¬äºæ¥æä½ç´è³æ¾åºç®æ æ°å */ /** * ééå½ç äºåæ¥æ¾ * @param array $container * @param $search * @return int|string */ function BinaryQuery( array $container,$search){ $top = count($container); $low = 0; while ( $low <= $top){ $mid = intval( floor( ($low + $top ) / 2) ); if( !isset($container[$mid]) ) return '没æ¾çå¦'; if( $container[$mid] == $search) return $mid; $container[$mid] < $search && $low = $mid+1; $container[$mid] > $search && $top = $mid-1; } } // var_dump( BinaryQuery([0,1,2,3,4,5,6,7,8,9],9) ); /* * double(8) */ /** * éå½ç äºåæ¥æ¾ * @param array $container * @param $search * @param int $low * @param string $top * @return int|string */ function BinaryQueryRecursive(array $container,$search,$low = 0,$top = 'default'){ $top == 'default' && $top = count($container ); if( $low <= $top ){ $mid = intval( floor( $low + $top ) /2 ); if( !isset($container[$mid]) ) return '没æ¾çå¦'; if( $container[$mid] == $search) return $mid; if( $container[$mid] < $search ){ return BinaryQueryRecursive($container,$search,$mid+1,$top); }else{ return BinaryQueryRecursive($container,$search,$low,$mid-1); } } } // var_dump( BinaryQueryRecursive([0,1,2,3,4,5,6,7,8,9],9) );