用Python实现二分查找算法

2023-04-16 00:00:00 python 算法 查找

二分查找算法,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。它的思想是先确定待查找区间的中间位置,然后将待查找元素跟中间位置的元素进行比较。如果待查找元素等于中间位置的元素,查找成功;如果待查找元素小于中间位置的元素,则在左侧区间继续进行查找;如果待查找元素大于中间位置的元素,则在右侧区间继续进行查找。重复以上步骤,直到找到待查找元素或者查找区间为空。

下面是用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是要查找的目标元素。使用两个指针leftright确定待查找区间的边界,初始时left指向数组的第一个元素,right指向数组的最后一个元素。然后,计算待查找区间的中间位置mid,将待查找元素target与中间位置的元素进行比较。如果相等,返回中间位置mid;如果target大于中间位置的元素,说明要在右侧区间继续查找,将left的值更新为mid + 1;如果target小于中间位置的元素,说明要在左侧区间继续查找,将right的值更新为mid - 1。重复以上步骤,直到找到target或者查找区间为空,此时返回-1表示未找到。

下面是将二分查找算法应用到字符串的例子:

str_list = ["pidancode.com", "hello", "world", "皮蛋编程", "Python"]
target_str = "皮蛋编程"
idx = binary_search(str_list, target_str)
if idx != -1:
    print("找到了,位置在", idx)
else:
    print("未找到")

上面的代码中,str_list是一个字符串列表,其中包含了字符串"pidancode.com"、"hello"、"world"、"皮蛋编程"、"Python"。要查找的目标字符串是"皮蛋编程",使用binary_search函数在str_list中查找该目标字符串,如果找到了,输出该字符串所在的位置;否则,输出未找到。

相关文章