美文网首页
二分查找,返回相近或者相等数据(python)

二分查找,返回相近或者相等数据(python)

作者: sixiyizai | 来源:发表于2019-04-19 21:37 被阅读0次
import random


def binary_search(seq, target, max_cell=True):
    """
    二分查找,返回相近或者相等数据
    :param seq: 升序容器
    :param target: 目标数据能和seq中的值比较大小
    :param max_cell: 是否向上取整
    :return:
    """
    def _sim(_st, _end, _targ):
        return _st < _targ < _end

    assert bool(seq) and isinstance(seq, (list, tuple, str)), "输入需要是有序可迭代对象,且不能为空"
    if target <= seq[0]:
        return 0
    elif target >= seq[-1]:
        return len(seq) - 1
    start, end = 0, len(seq)
    while start <= end:
        mid = (start + end) // 2
        if seq[mid] == target:
            return mid
        elif seq[mid] < target:
            start = mid + 1
        elif seq[mid] > target:
            end = mid - 1

        if max_cell and _sim(seq[mid], seq[mid + 1], target) and seq[mid + 1] >= target:
            return mid + 1
        elif max_cell and _sim(seq[mid - 1], seq[mid + 1], target) and seq[mid] >= target:
            return mid
        elif (not max_cell) and _sim(seq[mid - 1], seq[mid], target) and seq[mid - 1] <= target:
            return mid - 1
        elif (not max_cell) and _sim(seq[mid - 2], seq[mid - 1], target) and seq[mid - 2] <= target:
            return mid - 2


def gen_seq(num):
    res = []
    for n in range(num):
        if random.choice([True, False]):
            res.append(n)
    return res


if __name__ == '__main__':
    seq_list = gen_seq(100)
    print(seq_list)
    index = binary_search(seq_list, 7.3, max_cell=True)
    print("index:{i}; value:{v}".format(i=index, v=seq_list[index]))

相关文章

  • 二分查找,返回相近或者相等数据(python)

  • python二分查找

    python二分查找 # 查找数据import random# nums = [random.randint(1,...

  • Python实现二分法

    Python实现二分查找 为什么需要二分查找 如果查找1-100内任意一个数字?顺序查找(简单查找)从1开始或者1...

  • 二分查找

    对于已排序数组的二分查找 基本思想: 先从数列中取出中值进行比对,若相等,返回中值。 若不相等,则将数组分成左右区...

  • Golang二分法查找

    使用二分查找需要数组是有序的。 比如在升序排列的数组中,将数组中间位置的数据与目标数据比较,如果相等则查找成功;否...

  • 二分查找

    题:二分查找中,数据存在重复项,返回数据最右边的一个数据,没有找到则返回一个合理的插入位置。 search 返回两...

  • 编程笔试题(三)二分查找

    题目 看一下这道编程题。 使用python对已排序的list中的元素进行二分查找,如果找到返回True,否则返回F...

  • 二分查找

    二分查找也称折半查找 算法要求 必须采用有序存储数据结构 必须按照关键字大小有序排列 思想 将n个元素分成大小相等...

  • 双指针(链表、数组)

    二分查找用于有序的排列python中的二分查找模块bisect,Python中的list.inidex时间复杂度是...

  • 算法和数据结构3.2二分查找

    二分查找也是一种在数组中查找数据的方法。它只能查找已经排好序的数据。 二分查找通过比较数组中间的数据与目标数据的大...

网友评论

      本文标题:二分查找,返回相近或者相等数据(python)

      本文链接:https://www.haomeiwen.com/subject/pgqhgqtx.html