0%

数组的二分算法模块--bisect

1.两点作用:

1.插入时就维护好一个排好序的数组
2.数组非常大的时候速度较快

用着也很简单,只有2个操作:查找、插入,每个操作各有2个方法,分别是

2.查找

1
bisect.bisect_left(a, x, lo=0, hi=len(a))

返回一个数组a的下标i,a[lo… i-1] < x <= a[i…hi]。也就是说在i左边的元素都比x小,在i及i右边的元素,都等于或大于x.

1
2
bisect.bisect_right()
bisect.bisect()

这两个是一样的。
返回一个数组a的下标i,a[lo… i-1] <= x <a[i…hi]。也就是说在i左边的元素小于等于x,在i及i右边的元素,都大于x

3.插入

1
bisect.insort_left()

插入的效果跟查找是一样的,不过就是查找然后插入:list.insert(bisect.bisect_left())

1
2
bisect.insort_right()
bisect.insort()

上边四个操作可以用下图帮助理解: