array_search() 函数在数组中搜索某个键值,并返回对应的键名。
in_array() ,在数组中查找一个键值。如果找到了该值,返回true。如果没找到,则返回 false
算法:
①顺序查找:
//顺序查找
function SqSearch($arr,$key){
$length = count($arr);
for($i=0;$i<$length;$i++){
if($key == $arr[$i]){
return $i+1;
}
}
return -1;
}
$key = 8;
echo "<br/>顺序常规查找{$key}的位置:";
echo SqSearch($arr,$key);
$arr = array(3,5,8,4,9,6,1,7,2);
②二分查找
//二分查找
二分查找法需要数组是一个有序的数组
假设我们的数组是一个递增的数组,首先我们需要找到数组的中间位置.
一。要知道中间位置就需要知道起始位置和结束位置,然后取出中间位置的值来和我们的值做对比。
二。如果中间值大于我们的给定值,说明我们的值在中间位置之前,此时需要再次二分,因为在中间之前,所以我们需要变的值是结束位置的值,此时结束位置的值应该是我们此时的中间位置。
三。反之,如果中间值小于我们给定的值,那么说明给定值在中间位置之后,此时需要再次将后一部分的值进行二分,因为在中间值之后,所以我们需要改变的值是开始位置的值,此时开始位置的值应该是我们此时的中间位置,直到我们找到指定值。
$arr = array(3,5,8,4,9,6,1,7,2); 1,2,3,4,5,6,7,8,9
function binary_search($arr,$low,$high,$key){
while($low<=$high){
$mid = intval(($low+$high)/2); 4
if($key == $arr[$mid]){
return $mid+1;
}elseif($key<$arr[$mid]){ 6 4
$high = $mid-1;
}elseif($key>$arr[$mid]){
$low = $mid+1;
}
}
return -1;
}
$key = 6;
echo "二分查找{$key}的位置:";
echo binary_search(QSort($arr),0,8,$key);