📜  迭代二分查找python(1)

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

迭代二分查找Python

在计算机科学中,二分查找(英文:binary search),也称折半查找(英文:half-interval search)、对数查找(英文:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。时间复杂度为O(log n)。

迭代二分查找是一种使用迭代法实现的二分查找算法。相比于递归实现的二分查找,迭代实现的主要优势在于能够有效地避免递归带来的函数调用栈开销,具有更好的性能表现。

实现思路

迭代二分查找的实现思路如下:

  1. 定义两个指针 leftright,分别指向数组的开头和结尾;
  2. 如果 left <= right,则循环继续,否则返回 -1 表示没有找到目标元素;
  3. 计算中间位置 mid,通过 mid 将原数组分为左右两个子数组;
  4. 如果 arr[mid] == target,则返回 mid
  5. 如果 arr[mid] < target,则更新 leftmid + 1,继续下一轮循环;
  6. 如果 arr[mid] > target,则更新 rightmid - 1,继续下一轮循环;
代码实现
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 = [1, 3, 5, 7, 9]
target = 5

result = binary_search(arr, target)
if result != -1:
    print(f"元素 {target} 在数组中的下标为 {result}")
else:
    print(f"元素 {target} 不在数组中")

输出结果:

元素 5 在数组中的下标为 2
注意事项
  • 迭代二分查找只适用于有序数组;
  • 由于该算法是对有序数组进行折半查找,因此在对非有序数组使用时,其结果是未定义的。