PHP数组的查找算法 即 找出某个数组中是否存在某个值
1.顺序查找 –
就是遍历数组一个一个进行判断如果相等表示找到 退出即可
/**
* 数组顺序查找某值
* @param array $arr 要检索的数组
* @param integer $need 要查询的数
* @return integer 找到返回该数下标 失败返回false
*/
function gener_search($arr,$need){
foreach ($arr as $k => $v) {
//如果找到 返回该数小标
if ($need === $v) {
return $k;
}
}
//没找到返回false
return false;
}
2.二分查找 –
二分查找又称折半查找,
优点是比较次数少,查找速度快,平均性能好;
其缺点是要求待查表为有序表,且插入删除困难。
因此,折半查找方法适用于不经常变动而查找频繁的有序列表
/**
* 数组二分查找
* @param array $arr 需要检索的数据
* @param integer $need 查找的数
* @param integer $begin 开始的位置 起始(默认)为0
* @param integer $end 结束位置 默认最后
* @return integer 找到返回该数下标 失败返回false
*/
$arr = array(2,4,6,10,16,26,42,68,110);
function binary_search($arr, $need, $begin=0, $end=null){
if (is_null($end)) {
$end = count($arr)-1;
}
//得到数组中间位置
$mid_index = floor(($begin+$end)/2);
//中间数如果正好相等 返回索引退出
if ($arr[$mid_index] == $need) {
return $mid_index;
}
//中间数若大于查找数 标识在其左边 左边数据递归操作
if ($arr[$mid_index] > $need) {
//数组最小数都大于查找数 直接返回false
if ($arr[0] > $need) {
return false;
}
$ret = binary_search($arr, $need, $begin, $mid_index-1);
}else{
if ($arr[$end] < $need) {
return false;
}
$ret = binary_search($arr, $need, $mid_index+1, $end);
}
return $ret;
}