📜  数据结构和算法二进制搜索(1)

📅  最后修改于: 2023-12-03 15:10:20.494000             🧑  作者: Mango

数据结构和算法二进制搜索

二进制搜索也叫二分查找,是一种常用的搜索算法,在有序数组中查找特定元素时非常高效。本文将对二进制搜索的原理、实现和应用进行介绍。

原理

二进制搜索的原理很简单:对于有序数组,首先取其中间元素,如果该中间元素等于目标元素,则返回该元素的下标;如果该中间元素大于目标元素,则在左半部分继续进行二分查找;如果该中间元素小于目标元素,则在右半部分继续进行二分查找。重复以上过程直到找到目标元素或者无法继续分段为止。

由于每次都是将查找范围减半,所以二进制搜索的时间复杂度是O(log n),非常高效。

实现

下面是二进制搜索的Python实现:

def binary_search(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

其中,arr表示有序数组,target表示需要查找的元素。left和right分别代表查找范围的左右边界,mid表示中间元素的下标。最后返回的是目标元素的下标,如果不存在则返回-1。

应用

二进制搜索在有序数组中查找特定元素时非常高效,因此应用非常广泛。例如:

  • 在新闻网站上查找特定日期的新闻
  • 在排行榜上查找特定用户的排名
  • 在大量数据中查找某个值的出现次数等等。

下面是一个在有序数组中查找最后一个小于等于目标值的元素的例子:

def find_last_le(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] <= target:
            if mid == len(arr) - 1 or arr[mid + 1] > target:
                return mid
            else:
                left = mid + 1
        else:
            right = mid - 1
    return -1

该函数返回的是最后一个小于等于目标值的元素的下标,如果不存在则返回-1。

总结

二进制搜索是一种高效的搜索算法,适用于在有序数组中查找特定元素的情况。掌握了二进制搜索的原理和实现,就能够在实际开发中充分利用其优势,提高程序的效率。