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


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


猜你喜欢

转载自blog.csdn.net/u012910292/article/details/55057046