* @date 2017/6/17 * @license MIT * ------------------------------------------------------------- * æè·¯åæï¼æ°ç»ä¸é´çå¼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; } } /** * éå½ç äºåæ¥æ¾ * * @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); } } } // +-------------------------------------------------------------------------- // | æ¹æ¡æµè¯ | php `this.php` || PHPStorm -> å³é® -> Run `this.php` // +-------------------------------------------------------------------------- var_dump(BinaryQuery([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 9)); /* * double(8) */ var_dump(BinaryQueryRecursive([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 9)); /* array(7) { [0] => int(3) [1] => int(4) [2] => int(5) [3] => int(6) [4] => int(7) [5] => int(8) [6] => int(9) } */