二分查找
function bin_search ($arr, $num)
{
if (!in_array($num, $arr)) {
return 'error num input';
}
$len = count($arr);
$start = 0;
$end = $len-1;
while ($start <= $end) {
$mid = ceil( ($end+$start)/2 );
/*if ($arr[$start] === $num) {
return $start;
}
if ($arr[$end] === $num) {
return $end;
}*/
if ($arr[$mid] < $num) {
$start = $mid + 1;
}elseif ($arr[$mid] > $num) {
$end = $mid - 1;
}else {
return $mid;
}
}
return 'false';
}
$arr = [1,2,3,4,5,6];
//set_time_limit(2); //自己玩的时候加上这个预防死循环
echo bin_search($arr, 1);
由于二分查找需要的是有序数组,所以顺便贴一个 快速排序法
快速排序
function quick_sort ($array) {
if(!isset($array[1])) {
return $array;
}
$mid = $array[0];
$leftArray = array();
$rightArray = array();
foreach($array as $v)
{
if($v > $mid)
$rightArray[] = $v;
if($v < $mid)
$leftArray[] = $v;
}
$leftArray = quick_sort($leftArray);
$leftArray[] = $mid;
$rightArray = quick_sort($rightArray);
return array_merge($leftArray, $rightArray);
}
$arr2 = [2,0,54,2342,56,22,5];
var_dump(quick_sort($arr2));
网友评论