PHP实现二分查找算法(折半算法)
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]; ?>
- 上一篇:ini文件编辑
- 下一篇:对二维数组指定项排序
精彩图集
精彩文章