PHP数组的查找算法

来源:互联网 发布:pdf图书下载软件 编辑:程序博客网 时间:2024/06/06 13:18

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;    }


0 0