龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

PHP实现二分查找算法(折半算法)

时间:2014-07-22 14:51来源: 作者: 点击:
分享到:
PHP实现二分查找算法(折半算法)
PHP实现二分查找算法(折半算法)
<?php
/**
 * 比较函数
 * @param scalar $var1
 * @param scalar $var2
 * return bool
 */
 function compare($var1,$var2)
 {
 	if($var1>$var2)
 	{
 		return 1;
 	}
 	elseif($var1==$var2)
 	{
 		return 0;
 	}
 	else 
 	{
 		return -1;
 	}
 }
 
/**
 * 二分查找 重构的代码 支持关联数组
 * return index 查找目标数字所在的索引
 */
function binsearch_2($var=array(),$searchnum,$type=true)
{
	reset($var);
	$key=key($var);
	while($key!==null)							//$key可能为0  所以要用!==null判断
	{
		$_map[]=$key;							//键值映射
		next($var);
		$key=key($var);
	}
	echo '<pre>';
	print_r($_map);
	$left_border = 0;
	$right_border = count($_map)-1;
	while($left_border<=$right_border)
	{
		$middle=intval(($left_border+$right_border)/2);
		switch(compare($var[$_map[$middle]],$searchnum))
		{
			case -1:
				if($type)
				{
					$left_border = $middle+1;
				}
				else 
				{
					$right_border = $middle-1;
				}
				break;
			case 0:
				return $_map[$middle];
			case 1:
				if($type)
				{
					$right_border = $middle-1;
				}
				else
				{
					$left_border = $middle+1;
				}
				break;
		}
	}
	echo '没有匹配项';
	return false;
}

$arr=array('a'=>1,2,3,4,5,6,7,'b'=>8,9,10,11,'c'=>12);
$index = binsearch_2($arr,12,true);
echo $index;
echo $arr[$index];
?>
精彩图集

赞助商链接