1、问题: 二分查找分数所在位置
2、实现代码:
# 二分查找 递归方法实现
# 返回 x 在 arr 中的索引,如果不存在返回 -1
def binarySearch (arr, l, r, x):
# 基本判断
if r >= l:
mid = int(l + (r - l)/2)
# 元素整好的中间位置
if arr[mid] == x:
return int(x),mid
# 元素小于中间位置的元素,只需要再比较左边的元素
elif arr[mid] > x:
return binarySearch(arr, l, mid-1, x)
# 元素大于中间位置的元素,只需要再比较右边的元素
else:
return binarySearch(arr, mid+1, r, x)
else:
# 不存在
return -1,-1
arr = input()# 空格隔开
x = input()
arr = arr.split(" ")
# 函数调用
result,num = binarySearch(arr, 0, len(arr)-1, x)
if result != -1:
print (str(result) + ' ' +str(num+1) ) # 元素在数组中的索引为
else:
print ("")# 元素不在数组中
3、相关解释:
3.0 binarySearch()函数参数:
arr : 查找目标所在的数组
l : 左侧开始位置
r : 右侧结束位置
x : 查找目标
3.1 原理
二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。
二分法查找的思路如下:
(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。
(3)如果某一步数组为空,则表示找不到目标元素。
二分法查找的时间复杂度O(logn)。
来源:CSDN
作者:plasma007
链接:https://blog.csdn.net/plasma007/article/details/102826629