Python--内置二分法查找/插入模块(源码)

来源:互联网 发布:六皇后问题答案java 编辑:程序博客网 时间:2024/06/05 17:20

python内部有实现成熟的二分法模块:

模块名称:bisect
插入方法:
在源码中插入和寻找插入位置都有两种方法,一个是left,一个是right。其中,他们的区别就是当出现x是l中的某一个元素相等时,x是插在左边还是右边。源码中通过将相等的情况划分给‘向左缩进‘还是‘向右缩进‘的方式来控制。

def insort_right(l,x,lo=0,hi=None):#源码中的英语是这种用法,单词拼错了两次?    if lo<0:        raise ValueError('lo must be non-negative')    if hi is None:        hi=len(l)    while lo<hi:        mid=(lo+hi)//2        #如果是insort_left,则是:        #if l[mid]<x:lo=mid+1        #else:hi=mid        if x<l[mid]:hi=mid        else:lo=mid+1    l.insert(lo,x)

寻找位置

def bisect_right(l,x,lo=0,hi=None):    if lo<0:        raise ValueError('lo must be non-negative')    if hi is None:        hi=len(l)    while lo<hi:        mid=(lo+hi)//2        if x<l[mid]:hi=mid        else:lo=mid+1    return lo
0 0
原创粉丝点击