标签:not int sea height 操作 else run bin binary
如果我们只是为了确定这个查找的目标在列表中,在递归实现的方式中,可以直接使用列表的长度len(),来新建新的列表,如果需要找到对应的坐标就需要在原有的列表上利用对应的下标进行切片,这样就可以定位元素的下标
def search(li, item, low=0, height=None):
‘‘‘递归实现二分法查找,利用坐标操作原列表‘‘‘
if not li:
return False
height = len(li) - 1
mid = (low + height) // 2
if li[mid] == item:
return mid
if li[mid] > item:
return search(li, item, low, mid)
else:
return search(li, item, mid + 1, height)
def search1(li, item):
‘‘‘递归实现二分法查找,生成新的列表‘‘‘
if not li:
return False
mid = len(li) // 2
if li[mid] == item:
return mid #确实找到了对应的元素,但是不能坐标不正确,因为是切片新生成的列表
if li[mid] > item:
return search1(li[:mid], item)
else:
return search1(li[mid + 1:], item)
def BinarySearch(array, t):
‘‘‘循环实现‘‘‘
low = 0
height = len(array) - 1
while low <= height:
mid = (low + height) // 2
if array[mid] < t:
low = mid + 1
elif array[mid] > t:
height = mid - 1
else:
return mid, array[mid]
return False
if __name__ == ‘__main__‘:
print(BinarySearch([1, 2, 3, 34, 56, 57, 78, 87], 0))
print(BinarySearch([1, 2, 3, 34, 56, 57, 78, 87], 78))
print(search([1, 2, 3, 34, 56, 57, 78, 87], 78))
print(search1([1, 2, 3, 34, 56, 57, 78, 87], 87))
********* run log************
False
(6, 78)
6
0
标签:not int sea height 操作 else run bin binary
原文地址:https://www.cnblogs.com/testerWangzhao/p/12409046.html