加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用二进制搜索获取最接近值的索引

发布时间:2020-12-20 12:06:28 所属栏目:Python 来源:网络整理
导读:我想在 python中进行二进制搜索: def binarySearch(data,val): 其中data是排序数组,value是要搜索的值.如果找到该值,我想返回索引(这样数据[index] = val).如果找不到该值,我想返回最接近该值的项的索引. 这是我得到的: def binarySearch(data,val): high
我想在 python中进行二进制搜索:

def binarySearch(data,val):

其中data是排序数组,value是要搜索的值.如果找到该值,我想返回索引(这样数据[index] = val).如果找不到该值,我想返回最接近该值的项的索引.

这是我得到的:

def binarySearch(data,val):
    high = len(data)-1
    low = 0
    while True:
        index = (high + low) / 2
        if data[index] == val:
            return index
        if data[index] < val:
            low = index
        if data[index] > val:
            high = index

解决方法

这样的事情应该有效.它返回一个包含两个索引的数组.如果找到val,则返回数组中的两个值都相同.否则,它返回最接近val的两个项的索引.

def binarySearch(data,val):
    highIndex = len(data)-1
    lowIndex = 0
    while highIndex > lowIndex:
            index = (highIndex + lowIndex) / 2
            sub = data[index]
            if data[lowIndex] == val:
                    return [lowIndex,lowIndex]
            elif sub == val:
                    return [index,index]
            elif data[highIndex] == val:
                    return [highIndex,highIndex]
            elif sub > val:
                    if highIndex == index:
                            return sorted([highIndex,lowIndex])
                    highIndex = index
            else:
                    if lowIndex == index:
                            return sorted([highIndex,lowIndex])
                    lowIndex = index
    return sorted([highIndex,lowIndex])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读