这个插入value在list正确的位置,注意它假设已经排序。从文档:
按排序顺序插入 x。这相当于
a.insert(bisect.bisect_left(a, x, lo, hi), x)假设 a 已经排序。请记住,O(log n) 搜索主要由缓慢的 O(n) 插入步骤决定。
最后一部分是指在 Python 列表中插入是O(n). 搜索是使用二分搜索完成的。
如果您从一个空列表开始并重复使用此算法将对象插入列表,则最终列表将被排序。这种算法被称为二元插入排序。例如:
import bisect
l = [1, 3, 7, 5, 6, 4, 9, 8, 2]
result = []
for e in l:
bisect.insort(result, e)
print(result)
Run Code Online (Sandbox Code Playgroud)
输出
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
注意:该算法的复杂度由插入步骤O(n*n)给出O(n)。