二分法查找
Posted testerwangzhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分法查找相关的知识,希望对你有一定的参考价值。
如果我们只是为了确定这个查找的目标在列表中,在递归实现的方式中,可以直接使用列表的长度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
以上是关于二分法查找的主要内容,如果未能解决你的问题,请参考以下文章