二分查找的两种实现 by Python

2019-02-03  本文已影响0人  慧鑫coming

时间复杂度:O(logn)
二分查找应用场景的局限性:
1.二分查找依赖的是顺序表结构,简单的说就是数组;
2.二分查找针对的是有序数据;
3.数据量太小,不适合二分查找,数据量大时;
4.数据量太大,不适合使用二分查找,二分查找底层依赖数组,需要连续的内存空间,太大的话不容易找到;
5.如果数据之间的比较操作非常耗时,不管数据量大小,都推荐使用二分查找。

简单的二分查找场景:有序数组不存在重复元素
python 实现(非递归实现):

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 实现(递归实现):

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)
上一篇 下一篇

猜你喜欢

热点阅读