https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
如有转载,请注明出处(如不注明,盗者必究)
二分查找也称折半查找(Binary Search),这种搜索算法每一次比较都使搜索范围缩小一半,是一种效率较高的查找方法。
概念
是一种在有序数组中查找某一特定元素的查询算法。搜索过程从数组的中间元素开始,如果中间元素与要查找的元素相等,则搜索过程结束;如果查找元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中进行查找,而且跟开始一样从中间元素开始比较。重复以上过程,直到找到满足条件的元素,使查找成功,或直到数组为空为止,此时查找不成功。
要求
必须采用顺序存储结构,且按关键字大小进行有序排列。
代码举例
#coding=utf-8
# 二分查找 (递归)
# 返回 x 在 lists 中的索引,如果不存在返回None
def binarySearch(lists, left, right, x):
# 如果右边的值大于左边的值
if right >= left:
# 取左右两个数的中间值
mid = (left + (right - left) // 2)
# 若目标元素正好是中间位置,就返回mid,搜索过程结束
if lists[mid] == x:
return mid
# 元素小于中间位置的元素,比较左边的元素,且移动right下标
elif lists[mid] > x:
return binarySearch(lists, left, mid - 1, x)
# 元素大于中间位置的元素,比较右边的元素,移动left下标
else:
return binarySearch(lists, mid + 1, right, x)
else:
# 不存在的目标元素的情况就返回None
return
# 测试举例数组
arr = [1, 2, 3, 4, 5]
x = 6
# 函数调用
result = binarySearch(arr, 0, len(arr) - 1, x)
if result != None:
print("您输入的元素在数组中的索引为 %d" % result)
else:
print("您输入的元素不在数组中")
运行结果:
当x=3时;
运行结果
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
如有转载,请注明出处(如不注明,盗者必究)