Python_搜索_Binary Search_二叉搜索

输入一个已经排好序的算法,和一个目标数值,使用二叉搜索的方法确定这个target number在这个数组中的哪个位置,这个位置是这个数对应的下标值。

样例输入:

[0, 1, 21, 33, 45, 45, 61, 71, 72, 73]

33

样例输出:
3

Solution
test_array = [0, 1, 21, 33, 45, 45, 61, 71, 72, 73]
target_num = 33


def binarySearch(array, target):
    # Write your code here.
    return binary_search_help(array = array, target = target, left = 0,right=len(array)-1)


def binary_search_help(array, target, left, right):
	print(f"left:{left}--right{right} ")
	if left > right:
		#考虑到边际情况,实际上左边不会比右边大,如果出现这种情况,就表示找不到
		return -1
		#先确定一个middle //是去掉小数部分取整
	middle = (left+right)//2
	#假定这个middle的位置可能是要找的数字
	potential_Match = array[middle]
	#如果这个数字是要找的数字,返回这个middle的下标
	if target == potential_Match:
		return middle
	#由于这个数组是排好序的,如果目标小于中间值,向左搜索
	elif target < potential_Match:
		return binary_search_help(array,target,left,middle-1)
	#如果目标值大于中间值,向右搜索
	else:
		return binary_search_help(array,target,middle+1,right)



# print(55.5//2)
print(binarySearch(array = test_array,target = target_num))

complexity

Time = O(log(n))

Space = O(log(n))

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值