国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 邏輯算法 > 正文

PHP實現二分查找算法(代碼詳解)

2020-03-22 17:45:51
字體:
來源:轉載
供稿:網友
二分查找又稱折半查找,二分查找算法要求數據必須是有序的,以下是php實現二分查找算法的代碼。

一:遞歸方式

$array = [1,3,6,9,13,18,19,29,38,47,51,56,58,59,60,63,65,69,70,71,73,75,76,77,79,89];$target = 73;$low = 0;$high = count($array)-1;function bin_search($array, $low, $high, $target){    if ( $low <= $high){        var_dump($low, $high);echo "/n";        $mid =  intval(($low+$high)/2 );        if ($array[$mid] ==  $target){            return true;        }elseif ( $target < $array[$mid]){            return  bin_search($array, $low,  $mid-1, $target);        }else{            return  bin_search($array, $mid+ 1, $high, $target);        }    }    return false;}$find = bin_search($array, $low, $high, $target);var_dump($find);

執行結果

int(0)int(25)int(13)int(25)int(20)int(25)int(20)int(21)bool(true)

我們看到,經過4次二分查找,查找區間不斷折半,最終找到了$target。

二:循環方式

$array = [1,3,6,9,13,18,19,29,38,47,51,56,58,59,60,63,65,69,70,71,73,75,76,77,79,89];$target = 73;function bin_search($array, $target){    $low = 0;    $high = count($array)-1;    $find = false;    while (true){        if ($low <= $high){            var_dump($low, $high);echo "/n";            $mid = intval(($low + $high)/2);            if ($array[$mid] == $target){                $find = true;                break;            } elseif ($array[$mid] < $target){                $low = $mid+1;            } elseif ($array[$mid] > $target){                $high = $mid-1;            }        } else {            break;        }    }    return $find;}$find = bin_search($array, $target);var_dump($find);

執行結果

int(0)int(25)int(13)int(25)int(20)int(25)int(20)int(21)bool(true)

我們看到,兩種方式過程和結果相同。下面我們來測試下針對關聯數組的二分查找算法:

$array = ['a'=>1,'b'=>3,'c'=>6,'d'=>9,'e'=>13,'f'=>18,'g'=>19,'h'=>29,'i'=>38];$target = 19;function bin_search($array, $target){    $low = 0;    $high = count($array)-1;    $key_map = array_keys($array);    $find = false;    while (true){        if ($low <= $high){            var_dump($low, $high);echo "/n";            $mid = intval(($low + $high)/2);            if ($array[$key_map[$mid]] == $target){                $find = true;                break;            } elseif ($array[$key_map[$mid]] < $target){                $low = $mid+1;            } elseif ($array[$key_map[$mid]] > $target){                $high = $mid-1;            }        } else {            break;        }    }    return $find;}$find = bin_search($array, $target);var_dump($find);執行結果int(0)int(8)int(5)int(8)bool(true)

兩次二分查找,找到了$target,針對關聯數組,我們使用了php的array_keys函數獲得這個關聯有序數組的key,通過key間接比對$target和$array的值。

以上就是PHP實現二分查找算法(代碼詳解)的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 基隆市| 阳江市| 远安县| 确山县| 普格县| 乌兰察布市| 安西县| 湖口县| 舞钢市| 大渡口区| 山阴县| 韶山市| 小金县| 定州市| 尤溪县| 长岭县| 灌云县| 淅川县| 厦门市| 肃北| 本溪市| 抚松县| 吴堡县| 洛阳市| 准格尔旗| 泰来县| 曲水县| 盐城市| 册亨县| 梨树县| 宁德市| 德州市| 涪陵区| 分宜县| 洪雅县| 永丰县| 林周县| 开远市| 抚宁县| 呼玛县| 嘉鱼县|