码迷,mamicode.com
首页 > 其他好文 > 详细

二分法查找

时间:2020-03-04 14:47:33      阅读:68      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!