人工智能你必须掌握的32个算法(一)二分搜索算法

在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。 从维基百科对于二分搜索的描述中可以发现: ①二分搜索的基础是必须是有序数组,并且是可比较的 ②假设数组为升序,选取中间元素与需要查找元素比较大小。如果当前元素与选取元素相等,则查找结束;如果当前元素比选取元素大,则选取当前元素的右侧元素,反之选取当前元素左侧元素。 ③重复步骤②直至查找指定元素或剩余元素数量为零 编程中我们需要注意两个问题: ①当数据数量为偶数时,如何选取中间值
②当有相同数据时如何处理 代码实现:

array = [1, 2, 3, 4, 5, 6, 7]
def binarySearch(array, value):
low = 0
high = len(array)-1
while low <= high:
    midd = (low+high)//2  # 取整 防止结果是小数
    if value == array[midd]:
        return array[midd]  # 选中结果  跳出循环
    elif value > array[midd]:
        low = midd+1 #大于当前值 选取右侧剩余数据
    else:
        high = midd-1 #小于当前值 选取左侧剩余数据
return None
print('result:' + str(binarySearch(array, 3)))

 

转载于:https://my.oschina.net/mutoushirana/blog/1854643

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值