PHP数组的查找算法
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; }
二分查找又称折半查找,
优点是比较次数少,查找速度快,平均性能好;
其缺点是要求待查表为有序表,且插入删除困难。
因此,折半查找方法适用于不经常变动而查找频繁的有序列表
/** * 数组二分查找 * @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; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: PHP中的数组(查找)
- 下一篇: 整型int和字节数组byte相互转换