Python搜索算法——二分搜索

二分搜索算法(Binary Search)是一种高效的搜索算法,用于在有序数组中查找目标元素。它通过反复将目标值与数组的中间元素进行比较,并根据比较结果缩小搜索范围,直到找到目标值或确定它不在数组中。

二分搜索算法步骤:

  1. 初始化左右指针,分别指向数组的起始和结束位置。
  2. 在每一步中,计算中间元素的索引,然后获取中间元素的值。
  3. 将目标值与中间元素的值进行比较。
    • 如果目标值等于中间元素的值,则找到目标元素,返回其索引。
    • 如果目标值小于中间元素的值,则在左半部分继续搜索。
    • 如果目标值大于中间元素的值,则在右半部分继续搜索。
  4. 重复上述步骤,直到找到目标元素或左右指针相遇(表示目标元素不在数组中)。

二分搜索算法示例实现:

def binary_search(arr, target):
    """
    在有序数组中进行二分搜索,并返回目标元素的索引(如果找到)。
    
    Parameters:
        arr (list): 有序数组。
        target: 要搜索的目标元素。
    
    Returns:
        int: 目标元素的索引,如果找到;否则返回-1。
    """
    left, right = 0, len(arr) - 1
    
    while left <= right:
        mid = left + (right - left) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    
    return -1

# 示例数组
arr = [2, 4, 6, 8, 10, 12, 14]
# 目标元素
target = 10

# 进行二分搜索
index = binary_search(arr, target)
if index != -1:
    print(f"目标元素 {target} 在数组中的索引为 {index}")
else:
    print(f"数组中未找到目标元素 {target}")

以上是二分搜索算法的实现示例。

由于二分搜索算法每次都将搜索范围减半,因此其时间复杂度为O(logn),其中n是数组的长度。这使得二分搜索算法在大规模有序数组中查找目标元素时非常高效。

相关推荐

  1. Python搜索算法——二分搜索

    2024-03-30 16:18:03       42 阅读
  2. 算法笔记—二分搜索

    2024-03-30 16:18:03       53 阅读
  3. 搜索算法系列之二(二分查找)

    2024-03-30 16:18:03       39 阅读
  4. 二分搜索

    2024-03-30 16:18:03       36 阅读
  5. C语言小试身手:实现二分搜索算法

    2024-03-30 16:18:03       27 阅读
  6. 搜索二维矩阵【二分

    2024-03-30 16:18:03       63 阅读
  7. 【leetcode】二分搜索题目总结

    2024-03-30 16:18:03       32 阅读
  8. Python实现通过ISBN搜索书籍算法

    2024-03-30 16:18:03       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 16:18:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 16:18:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 16:18:03       82 阅读
  4. Python语言-面向对象

    2024-03-30 16:18:03       91 阅读

热门阅读

  1. 代码随想录算法训练营第三十二天|leetcode738题

    2024-03-30 16:18:03       46 阅读
  2. npm 常用命令详解

    2024-03-30 16:18:03       35 阅读
  3. Qt_Note18_QML_c++与qml信号与槽

    2024-03-30 16:18:03       43 阅读
  4. taskkill /f /fi “windowtitle eq 窗口标题“ /t 踩坑

    2024-03-30 16:18:03       39 阅读
  5. 云备份客户端业务实现逻辑

    2024-03-30 16:18:03       37 阅读
  6. JVM之堆

    JVM之堆

    2024-03-30 16:18:03      29 阅读
  7. 面向对象设计之单一职责原则

    2024-03-30 16:18:03       46 阅读