个人主页:丷从心·
系列专栏:分治算法
学习指南:算法学习指南
问题描述
- 给定已排好序的 n n n个元素 a [ 0 : n − 1 ] a[0 : n - 1] a[0:n−1],在这 n n n个元素中找出一特定元素 x x x
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 = [1, 3, 5, 7, 9]
target = 5
res = binary_search(arr, target)
if res != -1:
print(f'目标元素 {target} 在列表中的索引为 {res}')
else:
print('目标元素不在列表中...')
目标元素 5 在列表中的索引为 2
时间复杂性
- 在最坏情况下,
while
循环被执行了 O ( log n ) O(\log{n}) O(logn)次,循环体内运算需要 O ( 1 ) O(1) O(1)时间,因此整个算法在最坏情况下的时间复杂性为 O ( log n ) O(\log{n}) O(logn)