上次,我们总结了在Python数据结构中排序算法的实现,这次我们来实现二分查找算法。
二分查找,顾名思义就是从有序列表中的中间取值与要查找的数据匹配,再依靠递归的思想可以非常简单地实现二分算法。代码如下
def binary_search(mlist, item):
"""递归实现二分算法"""
n = len(mlist)
# 对序列大小的判断:
if n > 0:
# 折中取值
mid = n // 2
# 如果中间的值是我们要查找的,直接返回True
if mlist[mid] == item:
return True
if mlist[mid] > item:
# 对序列进行切片,进行递归
return binary_search(mlist[:mid-1], item)
else:
return binary_search(mlist[mid+1:], item)
return False
if __name__ == "__main__":
mlist = [1, 2, 3, 4, 5, 6, 6, 7]
result = binary_search(mlist, 10)
print(result)
运行结果:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
当然二分查找算法也可以不用递归实现,具体代码如下
def binary_search(mlist, item):
first = 0
last = len(mlist) - 1
while first < last:
# 此步最为关键
mid = (first + last) // 2
if item == mlist[mid]:
return True
elif item > mlist[mid]:
first = mid + 1
elif item < mlist[mid]:
last = mid - 1
return False
if __name__ == "__main__":
mlist = [1, 2, 3, 4, 5, 6, 6, 7]
result = binary_search(mlist, 6)
print(result)
运行结果:当然是对的啦