[基础算法]二分查找Binary Search

Posted 极客见闻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[基础算法]二分查找Binary Search相关的知识,希望对你有一定的参考价值。


二分查找


Binary Search是在排序数组中查找指定元素的一种搜索算法。


如下图所示:

查找数字7

1. 将数组中间的元素14与7比较,由于< 14,  目标在左边的一半

2. 将剩余部分中间元素6与7比较,由于6 < 7,  目标在右边的一半

3. 沿着图中箭头,不断的把问题缩小一半,直到找到目标


时间复杂度分析


二分查找相当于通过O(1)的执行时间(大小比较操作),把问题缩小一半


T(N) = T(N/2) + O(1)
    = (T(N/4) + O(1)) + O(1)
    = ((T(N/8) + O(1)) + O(1)) + O(1)
    ...
    = T(1) + logN * O(1)
    = O(logN)


实现


def binary_search(self, nums, target):
   if nums is None or len(nums) == 0:
       return -1

   start = 0
   end = len(nums) - 1
   while(start + 1 < end):
       mid = start + (end - start) / 2 # avoid mid overflow
       if nums[mid] == target:
           return mid
       elif nums[mid] < target:
           start = mid
       else:
           end = mid
           
   if nums[start] == target:
       return start
   if nums[end] == target:
       return end
       
   return -1



--END--




以上是关于[基础算法]二分查找Binary Search的主要内容,如果未能解决你的问题,请参考以下文章

C++之binary_search二分查找算法

算法模板Binary Search 二分查找

算法 -- C#实现二分查找(Binary Search)

#14 二分查找(Binary Search)

二分查找算法(Binary Search)的时间复杂度

二分查找 Binary Search