- 想象你在玩一个猜数字的游戏,数字范围是1到100。如果每次都猜中间的数字,然后根据提示(比如“猜大了”或“猜小了”)来调整你的猜测范围,那么很快就可以找到正确的数字。
- 二分查找就是这样的原理,每次都猜中间的数字,然后根据结果来缩小查找范围。这样的查找方法非常高效,因为每次都可以排除一半的可能性。
二分查找是一种在有序列表中查找特定元素的算法。其基本思想是,通过与中间元素比较,将待查找的范围缩小一半,从而达到快速查找的目的。
为什么叫“二分”查找?
因为每次我们都把列表分成两部分,只在其中一个部分里继续查找,这样查找范围每次都减少一半。
原理:
举例:
假设我们有一个有序的数字列表:[1, 3, 4, 5, 7, 8, 9, 10, 12, 14, 15],我们想要找数字8。
如果我们要找的是数字4:
def binary_search(arr, x):
"""
Perform binary search on a sorted list to find the position of element x.
:param arr: A sorted list.
:param x: The element to search for.
:return: The position of x in arr, or -1 if x is not found.
"""
# Define initial low and high pointers
low, high = 0, len(arr) - 1
# While the low pointer does not surpass the high pointer
while low <= high:
# Calculate the middle index
mid = (low + high) // 2
# If the element at the middle index is the one we're looking for
if arr[mid] == x:
return mid
# If the element at the middle index is greater than x, we look in the left half
elif arr[mid] > x:
high = mid - 1
# If the element at the middle index is less than x, we look in the right half
else:
low = mid + 1
# If we've exhausted the search space and haven't found x, return -1
return -1
# Example
arr_example = [1, 3, 4, 5, 7, 8, 9, 10, 12, 14, 15]
x1 = 8
x2 = 4
position1 = binary_search(arr_example, x1)
position2 = binary_search(arr_example, x2)
position1, position2
RESULT
(5, 2)
在我们的示例中:
这就是二分查找在 Python 中的实现。