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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章