二分查找的兩種實(shí)現(xiàn) by Python

時(shí)間復(fù)雜度:O(logn)
二分查找應(yīng)用場(chǎng)景的局限性:
1.二分查找依賴的是順序表結(jié)構(gòu),簡(jiǎn)單的說就是數(shù)組;
2.二分查找針對(duì)的是有序數(shù)據(jù);
3.數(shù)據(jù)量太小,不適合二分查找,數(shù)據(jù)量大時(shí);
4.數(shù)據(jù)量太大,不適合使用二分查找,二分查找底層依賴數(shù)組,需要連續(xù)的內(nèi)存空間,太大的話不容易找到;
5.如果數(shù)據(jù)之間的比較操作非常耗時(shí),不管數(shù)據(jù)量大小,都推薦使用二分查找。

簡(jiǎn)單的二分查找場(chǎng)景:有序數(shù)組不存在重復(fù)元素
python 實(shí)現(xiàn)(非遞歸實(shí)現(xiàn)):

class Solution:
    def bsearch(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        low = 0
        high = len(nums) - 1
        while low <= high:
            mid = low + ((high - low) >> 1)
            if nums[mid] == val:
                return mid
            if nums[mid] < val:
                low = mid + 1
            elif nums[mid] > val:
                high = mid - 1
        return -1

python 實(shí)現(xiàn)(遞歸實(shí)現(xiàn)):

class Solution:
    def bsearch(self, nums, low, high, val):
        """
        :type nums: List[int]
        :type low: int
        :type high: int
        :type val: int
        """
        if low > high:
            return -1
        mid = low + ((high-low) >> 1)
        if nums[mid] == val:
            return mid
        if nums[mid] > val:
            high = mid - 1
        elif nums[mid] < val:
            low = mid + 1
        return self.bsearch(nums, low, high, val)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容