日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

二分查找法

發布時間:2023/12/13 综合教程 24 生活家
生活随笔 收集整理的這篇文章主要介紹了 二分查找法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工作原理

一、流程圖

二、原理

第一步:我們選取目標數和基準值

$arr = [1,2,3,4,5,6,7,8,9];
$mind = ceil(($start+$end)/2);

第二步:判斷當前要查找的值是否是基準值,是就直接返回下標;不是在判斷是不是基準值的左邊或右邊,如果不存在,數組繼續選取,直到找到為止返回下標。

圖解

注意:

1、二分查找法一定是排好序的,才能使用二分查找;

源代碼

一、遞歸的方式實現

<?php
    function search($arr, $key, $start, $end)
    {
        if($start > $end) return false;
        $mid = intval(ceil(($start + $end) / 2));
        if($arr[$mid] < $key){
            return search($arr, $key, $mid + 1, $end);
        }elseif($arr[$mid] > $key){
            return search($arr, $key, 0, $mid - 1);
        }else{
            return true;
        }
    }

    function find ($target, $array)
    {
        foreach ($array as $key => $value) {
            $len = count($value) - 1;
            $res = search($value, $target, 0, $len);
            if(!$res){
                continue;
            }else{
                return true;
            }
        }
        return false;
    }

    $arr = [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]];
    find(5, $arr);

二、迭代的方式實現

function binSearch($arr, $key){  
    $start=0;  
    $end=count($arr)-1;  
    while($start <= $end){  
        $mid = ceil(($start+$end)/2);  
        if($arr[$mid] < $key){  
            $start = $mid+1;  
        }else if($arr[$mid] > $key){  
            $end = $mid-1;  
        }else{  
            return $mid;  
        }  
    }  
}
$arr = [1,2,3,4,5,6,7,8,9];
$len = count($arr) - 1;
$data = binSearch($arr, 5, 0, $len);
var_dump($data);

性能分析

查找算法 時間復雜度 空間復雜度 穩定性
平均情況 最壞情況 最好情況
二分查找法 O(log2n) O(n) O(log2n) O(1)-O(log2n) 穩定

總結

以上是生活随笔為你收集整理的二分查找法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。